我是rails和rspec的新手,并且无法理解为什么这个测试失败了:
describe 'adding a friend' do
it 'updates friends' do
user = create(:user)
expect {
user.friends << create(:user)
}.to change{user.friends}
end
end
测试失败了:
Failure/Error: expect {
result should have changed, but is still #<ActiveRecord::Associations::CollectionProxy [#<User id: 1445, ...>]>
我使用byebug来确认friends集合最初是空的,并且rspec失败消息显示expect块确实修改了集合。
此外,该测试确实通过了:
it 'sanity test' do
a = []
expect {
a << 1
}.to change{a}
end
所以我不确定问题是什么。这是rails模型实现平等的方式吗?还是我正在使用Factory-girl? 我将如何测试朋友收藏集的修改?
提前致谢...
答案 0 :(得分:1)
要修复规范,请检查朋友count
是否已更改:
user = create(:user)
expect {
user.friends << create(:user)
}.to change{user.friends.count}.by(1)
然而,这是一个非常糟糕的测试。首先,它没有测试你自己的任何代码。它测试Rails自己的测试套件已经涵盖的默认Rails行为。其次,最好测试正确的朋友是否出现在新的朋友集合中,而不仅仅是断言朋友集合已经改变:
user = create(:user)
friend = create(:user)
user.friends << friend
expect(user.friends).to include(friend)