我一直在试图解决的一个问题现在几个星期.我正在运行最高反射率的测试我的轨道程序,并且他们工作的罚款,除了一个错误我不能让我的头左右。

  • 我使用MySQL与少的引擎。
  • 我已经设置 config.use_transactional_fixtures = true 在spec_helper.rb
  • 我载我的测试设备手动的命令 rake spec:db:fixtures:load.
  • 该最高反射率的测试正在编写一BackgrounDRb工作人员,它正在测试一个记录可以拥有它的国家更新(通过想象gem).

这里是我的问题:

我有一个模型,称为 Listings.该最高反射率的试验电话的 update_sold_items 方法的文件内称为 listing_worker.rb.这种方法叫 listing.sell 对于一个特定记录,其中规定的清单记录的国家列于"已售出".迄今为止,这是所有工作,但当 update_sold_items 方法完成时,我的最高反射率的测试失败了这里:

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 等等。

谢谢你读这个,并请问任何问题,如果我没有给予足够的信息。

感谢您的帮助, Nathan B

P.S.我没有问题,创造新的记录的其他课程,并测试这些记录。它似乎只是一个问题时我更新的记录中已经存在的数据库。

有帮助吗?

解决方案

我怀疑,像内森,交易的问题。尝试把清单。连接。执行("COMMIT")的权利之前你先救电话打交易,并看到有什么变化。这将打破你的事务所以任何其他回退的话将是非有效.

此外,通过运行"承诺"的命令,你可以暂停试验与调试和检查的数据库从另一个客户来看看发生了什么事情。

其他假设,如果交易的试验不会产生任何结果,是,也许你的模特真的不是节省数据库。检查查询的记录。(具体地找到更新的查询)。

这种问题真的很臭!祝你好运!

其他提示

如果你想要调查你有什么DB在运行测试时你可能会发现这是很有帮助的...

我有一个最高反射率的测试我保存@户。保存和它的工作就像一个魅力,但是后来我想看看如果这是真正保存在数据库。

我打开了轨道控制台进行测试环境

rails c test

User.all

并且正如预期得到了什么

我跑我的规范,其中包含:

user_attr_hash    = FactoryGirl.attributes_for(:user)
@user = User.new user_attr_hash
@user.save
binding.pry

我认为,停止试验后的节省将意味着它的持续存在,但这不是这种情况。看来,提交连接上是被解雇后的(我也不知道当:\) 因此,如@蒂姆*哈珀表明,你有火承诺自己在撬开控制台:

pry(#<RSpec::Core::ExampleGroup::Nested_1>)> User.connection.execute("COMMIT")

现在,如果你跑的用户。所有的在轨控制台你应该看到它;)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top