我有一个奇怪的情况,如果我运行单个rspec模型spec文件,则所有示例都是绿色的;如果我测试整个spec/models文件夹,则所有示例也都是绿色的。如果我测试控制器,它们也都通过了。但如果我测试整个套件(通过rspec spec),那么我会得到失败的结果——如果我完全删除控制器测试,则所有内容都是绿色的。现在我预计这完全是自己造成的问题,但我就是想不出来。
我已经将问题缩小到控制器测试中的特定示例,这些示例会导致模型规范中的示例失败。
例如,在notes_controller_spec.rb中,如果存在以下行:
我已经将问题缩小到控制器测试中的特定示例,这些示例会导致模型规范中的示例失败。
例如,在notes_controller_spec.rb中,如果存在以下行:
Note.any_instance.stubs(:valid?).returns(false)
这导致我的models/account_spec.rb出现故障。
Failure/Error: @account.all_notes.should have(2).notes
ArgumentError:
comparison of Note with Note failed
./app/models/account.rb:293:in `sort'
293行在哪里;
(self.notes + self.transactions.map(&:notes).flatten).sort {|a,b| a.created_at <=> b.created_at }
我非常确定这将是那种让人扇自己脸的时刻,所以请对我温柔点!
created_at
可能为其中一个笔记的nil
,这意味着您的排序块将会比较nil
和Fixnum
,这将导致该块返回nil
,从而使排序出现您所看到的ArgumentError
。您确定在运行此行时所有实例都已保存在数据库中吗?是否可能在每个示例运行之前未清空您的数据库? - Rob Davisbefore :all
块中完成的吗?这可能会导致方法保持存根的问题。只是猜测。 - siannopollo