Ruby on rails rails模型的奇怪rspec expect行为

Ruby on rails rails模型的奇怪rspec expect行为,ruby-on-rails,rspec,factory-bot,Ruby On Rails,Rspec,Factory Bot,我是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 描述“添加朋友”的操作 它‘更新朋友’吗 用户=创建(:用户) 期待{ user.f

我是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
描述“添加朋友”的操作
它‘更新朋友’吗
用户=创建(:用户)
期待{

user.friends要修复规范,请检查friends
count
是否已更改:

user = create(:user)
expect {
  user.friends << create(:user)
}.to change{user.friends.count}.by(1)
user = create(:user)
friend = create(:user)
user.friends << friend

expect(user.friends).to include(friend)
user=create(:user)
期待{

user.friends已经有一段时间没有使用rspec了,但是您是否尝试过
user.reload.friends
?我只是尝试将“user.reload.friends”添加到expect块的末尾,但没有帮助。这就是您的意思吗?这也是我实际测试的简化-在最初的测试中,我正在测试一个添加到friends集合的方法,然后保存模型(除非我弄错了,否则这会消除重新加载的需要吗?)是的,这就是我的意思。也许
更改{UserFriend.count}.by(1)
。对不起,我应该更清楚地回答这个问题:规范是我实际代码的简化(我正在测试一个修改friends的方法)我已经重写为使用include,而不是您建议的change)。然而,在我学习rails和rspec时,我想知道为什么这不起作用。。
user = create(:user)
expect {
  user.friends << create(:user)
}.to change{user.friends.count}.by(1)
user = create(:user)
friend = create(:user)
user.friends << friend

expect(user.friends).to include(friend)