Ruby on rails rails 3.1rc5中的测试套件问题

Ruby on rails rails 3.1rc5中的测试套件问题,ruby-on-rails,rspec,cucumber,ruby-on-rails-3.1,Ruby On Rails,Rspec,Cucumber,Ruby On Rails 3.1,我最近将正在开发的一个应用程序升级到rails 3.1rc5 大部分情况下都很好,但我的一些测试出现了非常奇怪的问题 例如,在我的一个黄瓜规格中,我使用factory girl创建了一堆假记录。。通常这很好,但似乎出于某种原因,它没有创建记录 所以我把工厂里所有的东西都注释掉了,取而代之的是: c = Contact.new(:first_name => "SOMEONE", :last_name => "COOL", :dob => 10.years.ago, :sex =&

我最近将正在开发的一个应用程序升级到rails 3.1rc5

大部分情况下都很好,但我的一些测试出现了非常奇怪的问题

例如,在我的一个黄瓜规格中,我使用factory girl创建了一堆假记录。。通常这很好,但似乎出于某种原因,它没有创建记录

所以我把工厂里所有的东西都注释掉了,取而代之的是:

c = Contact.new(:first_name => "SOMEONE", :last_name => "COOL", :dob => 10.years.ago, :sex => "male")
if c.save
  puts "MYCOUNT: #{Contact.count}"
else
  puts "EXPLOSIONS!!!"
end
将其作为cucumber套件的一部分运行会输出以下内容:

MYCOUNT: 0
因此,联系人记录显然正在保存(并通过验证),但在我调用count时,它仍然没有显示出来

为什么

我正在使用:

轨道3.1rc5

rspec钢轨

黄瓜轨

工厂女孩轨道


我可能还应该注意到,我正在使用sunspot(solr API)为我的模型编制索引。

听起来您的测试中启动了事务回滚:

1) 开盘交易

2) Contact.save成功(现在有合法联系人实例和db记录)

3) 出现问题,引发ActiveRecord::回滚

4) 事务回滚,留下合法联系人实例但没有db记录,计数=0

我不知道是什么原因导致了与Rails升级相关的问题,但也许这会帮助您找到失败的地方

编辑:

如果跟踪log/test.log文件,则会看到发生回滚。您可以查看前面的DB活动,以了解在此之前最后一次成功的DB操作是什么


这不是一门精确的科学,但可能会帮助您确定是否是这种情况,并大致了解它的横向位置。

保存后能否运行
c.reload
?它是否显示在联系人中。全部?很抱歉等待了这么久。。我在度假:-)最奇怪的事。。运行c.reload后仍然没有任何内容,它也不会显示在联系人中。全部。。我还查了c.新记录?这是假的。。这太奇怪了!!谢谢你,伙计!是否有任何方法可以确定何时引发ActiveRecord::Rollback?请编辑以添加有关调试的更多详细信息。祝你好运一周前我碰到了一个这样的虫子,一开始它完全把我弄糊涂了。。就在钱上,跟踪它,我得到一个回退。现在是棘手的一点,找出它的来源!:P从外观上看,回滚之前的最后一件事是从contacts`中选择COUNT(*),其中contactsapproved=1`(approved=1是默认范围)。。之前的一个是:
RELEASE SAVEPOINT active\u record\u 1
。。。除了插入,回滚之前唯一的另一件事是保存附件。,我认为这可能是罪魁祸首。。所以我评论了我的回形针,但仍然没有骰子!啊!我想我已经找出了导致错误的原因:)这是我忘记的一个
初始化后的解决方法!谢谢你的帮助!