【问题标题】:Rspec hangs when testing for a 401 error with no records found测试 401 错误但未找到记录时,Rspec 挂起
【发布时间】:2014-03-27 01:18:05
【问题描述】:

我正在运行 rails-api 的 Rails 4 API 上使用 RSpec 运行集成测试。我想看看如果错误的电子邮件地址被传递给登录控制器,我会收到 401 回复。

这是我的期望

it "should throw invalid login for user with invalid email" do
  post "/api/v1/users/sign_in", uname: "wrong_email@wrong.com", password: "12234"

  expect(response).to eq(401)

end

在我的控制器中,我有:

def create
  @user = User.find_by_email(params[:uname])
  if(@user && @user.valid_password?(params[:password]))
  ....
end

这在浏览器中运行良好,我得到了 401。但是当我运行 rspec 它只会挂起并且永远不会报告失败或通过,只是坐在那里没有错误。问题的症结似乎是 if(@user) 部分。如果我删除它,那么测试至少会运行。

我检查了 log/test.log,我可以在日志中看到 Completed 401 Unauthorized in 14ms (Views: 0.2ms | ActiveRecord: 2.8ms)

更新

澄清一下,这是request spec。我正在测试 API 的使用者是否会在电子邮件无效的情况下收到 401 响应。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rspec rails-api


    【解决方案1】:

    试试

     expect(response.response_code).to eq 401
    

     expect(response.status).to eq 401
    

    【讨论】:

    • 做到了。 expect(response.response_code).to eq 401 工作。让我震惊的是,对于 200 个回复,我一直在使用 expect(response).to be_success,但显然对于非 200 个回复,我需要更具体。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多