【问题标题】:Writing tests for user authentication with rspec使用 rspec 编写用户身份验证测试
【发布时间】:2016-01-24 22:55:37
【问题描述】:

我目前正在尝试为 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! 在用户实例上调用 save ,但这是该方法正常工作所必需的。我怎样才能解决这个问题?

【问题讨论】:

  • 你可以stub方法save!
  • 很酷!谢谢!

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


【解决方案1】:

感谢 Oleg Sobchuk 的评论,我能够弄清楚如何处理 save! 方法。

由于stub 已被弃用,我将allow_any_instance_ofreceive 一起使用。这是我所做的:

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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2017-05-13
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    相关资源
    最近更新 更多