Ruby 改进在 CI 服务器中不起作用

标签 ruby linux ruby-2.0

我在 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。在运行脚本时,ruby 似乎无法识别 using 语句。

代码如下:

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

说明:细化是在不同的文件中定义的。我正在搜索互联网以查看修订版 r39474r38126.

最佳答案

在当前的 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/

相关文章:

linux - 如何在 Linux 上获取虚拟桌面名称/编号?

linux - 使用 awk 更改 no_proxy 环境变量值

ssl - 从 Ruby 1.9.3 升级到 2.0.0 期间出现 Mysql2 错误

ruby - 通过 302 重定向维护 session 和 cookie

ruby-on-rails - 可以让 Rails 4 在 Windows 上工作吗?

ruby-on-rails - Ruby 结构创建 block 无法访问 block 外的变量

ruby - 如何在 Mac OS X 上不使用 sudo 安装 gems

linux - Debian:找不到 deb 命令。我该如何解决?

ruby-on-rails - 设计自定义路由和登录页面

ruby - 对象变量名中的分号