Я пытаюсь решить проблему в течение нескольких недель. Я запускаю тесты rspec для моего приложения на Rails, и они работают нормально, за исключением одной ошибки, которую я, кажется, не могу понять.
- Я использую MySQL с движком InnoDB.
- Я установил
config.use_transactional_fixtures = true
в spec_helper.rb
- Я загружаю свои испытательные приборы вручную с помощью команды
rake spec:db:fixtures:load
.
- Тест rspec пишется для работника BackgrounDRb, и он проверяет, может ли состояние записи обновляться (через гем state_machine).
Вот моя проблема:
У меня есть модель под названием Listings
. Тест rspec вызывает метод update_sold_items
в файле с именем listing_worker.rb
.
Этот метод вызывает listing.sell
для конкретной записи, которая устанавливает для столбца «state» записи листинга значение «sold».
Пока что все работает нормально, но когда метод update_sold_items
завершается, мой тест rspec завершается неудачно:
listing = Listing.find_by_listing_id(listing_id)
listing.state.should == "sold"
expected: "sold",
got: "current" (using ==)
Я пытался выяснить, почему изменение состояния не сохраняется, но в значительной степени потеряно. Вот результат некоторого кода отладки, который я поместил в метод update_sold_items
во время теста:
pp listing.state # => "current"
listing.sell!
listing.save!
pp listing.state # => "sold"
listing.reload
pp listing.state # => "current"
Я не могу понять, почему это прекрасно экономит, но затем возвращается к исходной записи всякий раз, когда я звоню reload
или Listing.find
и т. Д.
Спасибо, что прочитали это, и, пожалуйста, задавайте любые вопросы, если я не предоставил достаточно информации.
Спасибо за вашу помощь,
Натан Б
P.S. У меня нет проблем с созданием новых записей для других классов и тестированием этих записей. Кажется, это только проблема, когда я обновляю записи, которые уже существуют в базе данных.