6

RSpecのinclude構成メソッドを使用して、名前空間専用のモジュールをインクルードするのが好きです。これにより、内部クラスとモジュールに完全修飾名を使用する必要がなくなります。これは、Ruby1.9.2のRSpec2.11.0で正常に機能しました。しかし、Ruby 1.9.3では、これは機能しなくなりました。どうすれば再び機能させることができますか?

foob​​ar_spec.rbの例を次に示します。

module Foo
  class Bar
  end
end

RSpec.configure do |config|
  config.include Foo
end

describe Foo::Bar do
  it "should work" do
    Bar.new
  end
end

次のコマンドで呼び出す場合:

rspec foobar_spec.rb

Ruby1.9.2でも問題なく動作します。ただし、Ruby1.9.3では次のエラーが発生します。

Failure/Error: Bar.new
     NameError:
       uninitialized constant Bar
4

3 に答える 3

15

このメーリングリストのエントリでは、定数の検索方法に関する1.9.3でのルートの変更について説明しているため、意図的な変更のように見えます。

次のように、テスト全体のスコープを設定できます。

module Foo
  describe Bar do
    it "should work" do
      Bar.new
    end
  end
end

別の解決策として、新しいオブジェクトの作成をに抽出するbeforeか、または単にオブジェクトをテストのletとして定義することができます。subject

于 2012-10-24T16:11:14.747 に答える
5

名前空間を1回だけ指定する必要がある場合、慣用的なRSpecの方法はdescribe_classを使用することです。このような:

module Foo
  class Bar
  end
end

describe Foo::Bar do
  it "should work" do
    described_class.new
  end
end
于 2014-08-13T06:44:51.427 に答える
0

itブロックとdescribe引数でFoo::Barを使用する必要があります。

于 2012-10-24T15:49:48.390 に答える