使用rspec

时间:2016-01-24 22:55:37

标签: ruby-on-rails ruby unit-testing rspec

我目前正在尝试在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!调用保存在用户实例上,但这是方法正常工作所必需的。我怎么能绕过这个?

1 个答案:

答案 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