我在 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之间是否存在差异
.
最佳答案
在当前的 Ruby 2.0 (2.0.0p0) 版本中,using
是顶级对象 main
的实例方法,而不是 Module< 的实例方法
。而且是私有(private)方法。如果您在类/模块定义或方法定义中调用它,则会引发 RuntimeError。
“main.using
激活的细化范围是从调用 main.using
之后到 main 的文件末尾.using
被调用。但是,当 main.using
在作为 Kernel#eval
的第一个参数给出的字符串中被调用时,Kernel#instance_eval
,或者Module#module_eval
,作用域的结尾就是字符串的结尾。”
您可以在 Refinements Specification 中阅读更多相关信息.
对于您的测试用例,您可以使用 eval
编写它们并传入顶级绑定(bind),例如 test cases在 ruby 源中。
Refinements 仍是一项实验性功能,将来可能会发生变化:-)
关于Ruby 改进在 CI 服务器中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15522177/