我目前正在尝试在rails中编写用于用户身份验证的单元测试,并且我一直遇到问题。
我正在尝试测试以下方法:
def reset_session_token!
self.session_token = User.generate_session_token
self.save!
self.session_token
end
进行以下单元测试:
let(:valid_user) { User.new(user_name: 'Name', password: 'abcdefghijkl')}
it "should set the session_token" do
valid_user.reset_session_token!
expect(valid_user.session_token).not_to be_nil
end
但测试失败,错误为Validation failed: User name has already been taken
。我怀疑这是因为reset_session_token!
调用保存在用户实例上,但这是方法正常工作所必需的。我怎么能绕过这个?
答案 0 :(得分:0)
感谢Oleg Sobchuk的评论,我能够弄清楚如何处理save!
方法。
由于stub
已弃用,我使用allow_any_instance_of
代替receive
。这是我做的:
it "should set the session_token" do
allow_any_instance_of(User).to receive(:save!).and_return(nil)
valid_user.reset_session_token!
expect(valid_user.session_token).not_to be_nil
end