Откат ActiveRecord не работает в тесте Rails - PullRequest
1 голос
/ 23 сентября 2010

Бросок ActiveRecord :: Откат работает, но не в тестах.

Раньше у меня была эта проблема, сейчас она возникает снова, и по какой-то причине не могу найти записи о ком-то еще, кто имел эту проблему.

Это связано с тем, что тесты выполняют откат каждый раз, когда выполняется тест, и большинство баз данных не поддерживают вложенные откаты. Однако я не могу быть единственным человеком с контрольными примерами, которые включают откат транзакции, поэтому, возможно, я делаю что-то не так.

Следующий тестовый пример не пройден (используется библиотека musta, хотя тот же тест не пройден с базовым Test :: Unit):

require 'test_helper'

class RollbackTest < ActiveSupport::TestCase
  context "create a record and throw rollback" do
    setup do
      User.transaction do
        User.create!
        raise ActiveRecord::Rollback
      end
    end

    should_not_change("count of users") { User.count }
  end
end

однако на консоли:

?> User.transaction do
?>         User.create!
>>         raise ActiveRecord::Rollback
>>       end
=> nil
>> User.count
=> 4
>> User.transaction do
?>         User.create!
>>         raise ActiveRecord::Rollback
>>       end
=> nil
>> User.count
=> 4

Ответы [ 2 ]

8 голосов
/ 23 сентября 2010

Вы должны отключить транзакции в вашем тестовом примере:

class RollbackTest < ActiveSupport::TestCase
  self.use_transactional_fixtures = false

[править: согласно @ комментарию Конрада должно быть transactionAL]

2 голосов
/ 28 апреля 2011

На самом деле метод для вызова выглядит следующим образом:

class RollbackTest < ActiveSupport::TestCase
  self.use_transactional_fixtures = false

не self.use_transaction_fixtures (обратите внимание на пропущенный 'al')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...