У меня есть две модели, давайте назовем их A и B. Создание новой записи A иногда будет вызывать создание записи B.
class A < ActiveRecord::Base
after_create { |a| B.create_for(a) if a.needs_b? }
end
в моем тестовом файле
class TapeTest < ActiveSupport::TestCase
self.use_transactional_fixtures = false
test "something" do
assert_equal(0, B.count)
a = A.create(:foo => "bar")
assert_equal(1, B.count)
end
end
и проверка не выполняется для второго утверждения, даже если это работает, если я скопирую его в консоль. Когда я добавляю вызов debugger
в метод B.create_for
, запись B действительно создается. Он отображается в БД и всё такое, но как только выполнение возвращается в блок test "something"
, оно исчезает! Я выключил транзакцию транзакций, чтобы попытаться решить эту проблему, но это не помогает.
РЕДАКТИРОВАТЬ: включение транзакционных исправлений фактически решает эту проблему, но ломает гораздо больше тестов, чем исправляет. Предположим, он должен быть выключен.