我在Jenkins服务器中遇到错误:
$ 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
澄清:细化在不同的文件中定义。我正在鞭打互联网,看看版本r39474
和r38126
之间是否存在差异。
答案 0 :(得分:8)
在当前版本的Ruby 2.0(2.0.0p0)中,using
是顶级对象main
的实例方法,而不是Module
的实例方法。这是一种私人方法。如果在类/模块定义或方法定义中调用它,则会引发RuntimeError。
“由main.using
激活的细化范围是从调用main.using
之后到调用main.using
的文件末尾。但是,当{{1}在作为main.using
,Kernel#eval
或Kernel#instance_eval
的第一个参数给出的字符串中调用,范围的结尾是字符串的结尾。“
您可以在Refinements Specification中了解详情。
对于您的测试用例,您可以使用Module#module_eval
编写它们并传入顶级绑定,例如ruby源中的test cases。
优化仍然是一项实验性功能,未来可能会发生变化: - )