2013-03-20 19 views
5

我有詹金斯服務器中的錯誤:紅寶石改進不是CI服務器工作

$ ruby -v 
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-linux] 

當運行rspec的,我有以下錯誤:

undefined method `using' for #<Class:0x000000026f9c88> (NoMethodError) 

完全相同的代碼工作在我的本地電腦,ruby2。 這是我的版本:ruby 2.0.0dev (2012-12-01 trunk 38126) [x86_64-linux] 此外,它適用於irb。看起來,運行腳本時,ruby並不認可using聲明。

下面的代碼:

describe "blah" do 
    include TestHelper 
    using TestHelper::BrowserRefinement 
    ... 
end 

澄清:細化在不同的文件中定義。我正在褻瀆interwebs,看看修訂版r39474r38126之間是否有區別。

+0

改變'把RUBY_VERSION',又會RSpec的打印? – 2013-03-20 11:26:37

+0

它顯示了正確的版本:2.0.0 – 2013-03-20 11:28:00

回答

8

在當前版本的Ruby 2.0(2.0.0p0)中,using是頂級對象main的實例方法,而不是Module的實例方法。這是一種私人方法。如果在類/模塊定義或方法定義中調用它,則會引發RuntimeError。

「一個改進的通過main.using激活的範圍是從點main.using被調用以在那裏main.using被調用的文件的結束之後。然而,當main.using在給出的Kernel#eval第一個參數的字符串被調用時, Kernel#instance_evalModule#module_eval,範圍的末尾是字符串的末尾。「

你可以在Refinements Specification瞭解更多。

對於您的測試用例,您可以使用eval編寫它們,並傳入頂級綁定,如紅寶石源中的​​。

加細仍然是實驗性的功能,如果您將它可能會在未來:-)

+0

僅供參考,這已在Ruby 2.1中進行了更改,即使在'Module'中也可以使用'using'(因此也可以使用'Class')。 – 2015-04-29 21:23:28