几个星期以来,我一直在尝试解决一个问题。我正在为我的 Rails 应用程序运行 rspec 测试,它们工作正常,除了一个我似乎无法理解的错误。
- 我正在使用带有 InnoDB 引擎的 MySQL。
- 我已经
config.use_transactional_fixtures = true
在 spec_helper.rb中设置了 - 我使用命令手动加载我的测试装置
rake spec:db:fixtures:load
。 - rspec 测试是为 BackgrounDRb 工作人员编写的,它正在测试记录是否可以更新其状态(通过 state_machine gem)。
这是我的问题:
我有一个模型叫Listings
. rspec 测试调用update_sold_items
名为listing_worker.rb
. 此方法调用listing.sell
特定记录,它将列表记录的“状态”列设置为“已售出”。到目前为止,一切正常,但是当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
等等。
感谢您阅读本文,如果我没有提供足够的信息,请提出任何问题。
感谢您的帮助,内森 B
PS我为其他类创建新记录并测试这些记录没有问题。当我更新数据库中已经存在的记录时,这似乎只是一个问题。