5

我在 Jenkins 服务器中遇到错误:

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

运行 rspec 时,出现以下错误:

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

完全相同的代码可以在我的本地计算机上运行,​​使用 ruby​​2。这是我的版本:ruby 2.0.0dev (2012-12-01 trunk 38126) [x86_64-linux] 此外,它适用于 irb。using运行脚本时,ruby 似乎无法识别该语句。

这是代码:

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

澄清:细化在不同的文件中定义。我在网上搜索,看看修订版r39474r38126.

4

1 回答 1

8

在当前版本的 Ruby 2.0 (2.0.0p0) 中,using是顶级对象的实例方法main,而不是Module. 这是一种私有方法。如果您在类/模块定义或方法定义中调用它,则会引发 RuntimeError。

“被激活的细化的范围main.using是从被调用之后的点main.using到被调用的文件的末尾main.using。但是,当在作为、或main.using的第一个参数给出的字符串中调用时,范围的结尾是字符串的结尾。”Kernel#evalKernel#instance_evalModule#module_eval

您可以在Refinements Specification中阅读更多相关信息。

对于您的测试用例,您可以使用eval顶级绑定编写它们并传递它们,例如 ruby​​ 源代码中的测试用例

改进仍然是一个实验性功能,将来可能会改变:-)

于 2013-03-22T17:46:39.357 回答