0

単体テストには異なる設定を、統合テストには異なる設定を設定する必要があります。例

ユニットテストについては、やりたいです

WebMock.disable_net_connect!(:allow_localhost => true)

そして統合テストのために、私はしたいです

WebMock.allow_net_connect!

また、統合テストを開始する前に、solrが開始されていることを確認したいと思います。だから私は電話できるようになりたい

config.before(:suite) do
  SunspotStarter.start
end

ただし、統合テストの場合のみ。単体テストの場合、Solrを起動したくありません。

それらの構成を別々に保つにはどうすればよいですか?今のところ、独自のspec_helperを持つspecフォルダーの外のフォルダーに統合テストを保持することでこれを解決しました。より良い方法はありますか?

4

2 に答える 2

2

インクルード ステートメントの場合と同じ方法で、before/after ブロックのタイプを指定できます。したがって、次のことができます。

RSpec.configure do |config|
  config.before(:each, type: :model) do
    WebMock.disable_net_connect!(:allow_localhost => true)
  end

  config.before(:each, type: :request) do
    WebMock.allow_net_connect!
  end

  config.before(:suite, type: :request) do
    SunspotStarter.start
  end
end
于 2012-05-21T11:06:30.167 に答える
2

私の解決策は少しハックかもしれませんが、テストした限りではうまくいくはずです。

私はそれが引数をconfig.include取ることに気づいたので、それはtypeab次のようにコードの任意のブロックを実行するために使用されます。

module UnitTestSettings
  def self.included(base)
    WebMock.disable_net_connect!(:allow_localhost => true)
  end
end

module IntegrationTestSettings
  def self.included(base)
    WebMock.allow_net_connect!

    RSpec.configure do |config|
      config.before(:suite) do
        SunspotStarter.start
      end
    end

  end
end

Rspec.configure do |config|
  config.include UnitTestSettings, :type => :model
  config.include IntegrationTestSettings, :type => :integration
end

これをサポート フォルダー内のファイルにドロップすると、コードを実際にテストしていませんが、問題なく使用できるはずです。また、同じことを達成するためのより良い方法があると確信しています。

于 2011-01-07T11:14:23.313 に答える