5

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で動作します。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を参照してください。

テスト ケースについては、Ruby ソースのテスト ケースevalのように、トップ レベルのバインディングを使用して記述し、渡すことができます。

Refinements はまだ実験的な機能であり、将来変更される可能性があります :-)

于 2013-03-22T17:46:39.357 に答える