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