41

RSpec 2 で 1 つの仕様 (または Steak シナリオ) のみのトランザクション フィクスチャをオフにするにはどうすればよいですか? ウェブで見つけたいくつかのことを試しましたが、成功しませんでした。

これにより、未定義のメソッド例外が発生します。

「トランザクション フィクスチャのない MyClass」について説明します。
  self.use_transactional_fixtures = false
  ...
終わり

これは単に何もしません (トランザクション フィクスチャはオンのままです):

「トランザクション フィクスチャのない MyClass」について説明します。
  RSpec.configure do |config|
    config.use_transactional_fixtures = false
  終わり
  ...
終わり

他に何を試すことができますか?

4

6 に答える 6

34

私は通常、次のようなヘルパーを追加します。

def without_transactional_fixtures(&block)
  self.use_transactional_fixtures = false

  before(:all) do
    DatabaseCleaner.strategy = :truncation
  end

  yield

  after(:all) do
    DatabaseCleaner.strategy = :transaction
  end
end

これにより、仕様の特定のブロックのトランザクションフィクスチャをオフにできます。

describe "doing my thing" do
  without_transactional_fixtures do
    it "does something without transaction fixtures" do
      ...
    end
  end
end
于 2011-10-09T11:37:42.317 に答える
9

トランザクションを使用するコードをテストするために、database_cleanerを使用してこのようにしました(transactional_fixturesまたはトランザクションテストを行う他の戦略(DatabaseCleaner.strategy =:truncationまたは:transactionなど)と競合します):

# spec_helper.rb
config.use_transactional_fixtures = false
config.around(:each, :testing_transactions => true) do |ex|
    DatabaseCleaner.strategy = nil
    ex.run
    DatabaseCleaner.strategy = :truncation
end

そして私のテストケースでは:

it "should not save if one of objects are invalid", :testing_transactions => true
于 2012-05-18T15:30:29.927 に答える
9

これは以前はバグ (チケット #197を参照) でしたが、今では問題ないようです。それがテストベースごとに機能するかどうかはわかりません(おそらく機能しません)。これを行いたい場合は、を設定し、DatabaseCleaner を使用して設定することconfig.use_transactional_fixtures = falseで、トランザクション フィクスチャをグローバルに無効にすることができます。spec_helper.rb

ブラウザーで JavaScript を使用してページをテストするときに、同様の問題が発生しました (トランザクション フィクスチャでは機能しないシナリオ)。これを回避する方法は次のとおりです。http://github.com/lailsonbm/contact_manager_app

于 2010-10-13T00:25:51.570 に答える