(提及shoulda
因为我知道它在Gemfile中 - 但是不知道它如何影响rspec测试,没有经验,不知道它是否涉及到这里)
我有两个[控制器]测试:
第一
it {should assign_to(:messages).with( current_user.messages.ordered.decorate)}
和第二:
it {should assign_to(:messages).with( current_user.messages.order(“send_at DESC”)。decorate)}
注意:message.rb定义:
scope :ordered, order( 'messages.send_at DESC' )
,所以他们正在测试完全相同的东西 - 除了用于按错误字段排序的ordered
方法,并且第一个测试总是通过,预期集合与实际相同;因此第二次测试明确要求正确的排序顺序。
现在,疯狂:第一次测试通过,第二次测试失败。 Rspec打印:
Expected action to assign #<DecoratedEnumerableProxy of
MessageDecorator for [#<Message id: 1, ... >, <Message id: 2, ...>]>,
but got #<DecoratedEnumerableProxy of MessageDecorator for [#<Message
id: 1, ... >, <Message id: 2, ...>]>
你猜对了 - 这里打印的“预期......”和“但得到......”部分完全相同。我用差异三重检查了它们。如果两个测试都失败了,我就不会那么困惑,但第一个通过,第二个失败。我怀疑第一次测试必须产生某种副作用,但不,重新排序或评论其中一项测试不会改变任何东西。
有什么想法吗?