2013-03-20 60 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