在写测试的时候经常要会出现如下情况
expect(user).to receive(:block_user!).with(other_user)
一般情况下这样挺好的,但是当涉及到查询时就非常麻烦了,比如在 controller 测试中
user = create :user
other_user = create :user
sign_in user
expect(user).to receive(:block_user!).with(other_user)
post :create, format: :json, user_id: other_user.id
expect(response).to have_http_status :success
这样写测试肯定通过不了,虽然在 action 查询出来的 user 与 other_user 其实就是测试代码中的 user 和 other_user,但是查询出来的 object_id 与测试代码中的不同,所以会导致下面这句测试不通过!
expect(user).to receive(:block_user!).with(other_user)
So,请教有没有什么 Gem 之类的对 receive 测试进行改进,使其就算 object_id 不同,也可以测试通过? 难道这种情况只能用如下方法解决?
expect(User).to receive(:find).with(user.id).and_return(user)
expect(User).to receive(:find).with(other_user.id).and_return(other_user)
这里不讨论测试写的好不好,只说针对上述情况的 receive 测试有没有更好的解法!