Rails 3 и Rspec 2 отключают транзакционные устройства для отдельных тестов - PullRequest
11 голосов
/ 11 октября 2010

Я нахожусь в процессе обновления моего приложения до 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?

Ответы [ 3 ]

19 голосов
/ 01 июня 2011

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

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

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

Я пробовал это с Rails 3.0.7 с RSpec 2.6.3, и похоже, что работает.

0 голосов
/ 13 октября 2010
RSpec.configure do |config|
  config.use_transactional_fixtures = true
end
0 голосов
/ 13 октября 2010

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

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

...