Rails 3 и Rspec 2 отключают транзакционные светильники для отдельных тестов

Я занимаюсь обновлением своего приложения до Rails 3. Я начал использовать Rspec 2 с Rails 3. Мне нужно отключить транзакционные приборы для некоторых моих тестов rspec. До этого я использовал следующий код в моих спецификациях модели

 before(:all) do
    ActiveSupport::TestCase.use_transactional_fixtures = false
  end

  after(:all) do
    ActiveSupport::TestCase.use_transactional_fixtures = true
    clean_engine_database
  end

Теперь это дает мне ошибку:

 Failure/Error: ActiveSupport::TestCase.use_transactional_fixtures = false
     undefined method `use_transactional_fixtures=' for ActiveSupport::TestCase:Class

Есть ли способ сделать это на каждом тестовом блоке в Rails 3 с Rspec 2?

Ответ 1

Я ищу ответ на этот вопрос, наткнулся на эту запись в блоге

Предлагается объявить внутри описываемого блока

describe "xxx" do
  self.use_transactional_fixtures = false
  ...

Я попробовал его с Rails 3.0.7 с RSpec 2.6.3 и выглядел как работающий.

Ответ 2

Вы можете отключить транзакционные светильники глобально, поместив config.use_transactional_fixtures = false в spec_helper.rb. Если вы хотите контролировать их с помощью теста (например, использовать транзакцию только для некоторых из них), вы можете установить это поведение с помощью DatabaseCleaner.

У меня была связанная с этим проблема при тестировании страниц с javascript в браузере (сценарий, который не работает с транзакционными светильниками). Вот как мне удалось обойти это: http://github.com/lailsonbm/contact_manager_app

Ответ 3

RSpec.configure do |config|
  config.use_transactional_fixtures = true
end