在没有找到记录的情况下测试401错误时,Rspec挂起

时间:2014-03-27 01:18:05

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

我在运行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,我可以在日志中看到在14ms内完成401 Unauthorized(视图:0.2ms | ActiveRecord:2.8ms)

更新

澄清一下,这是一个request spec。我测试的是,如果电子邮件无效,API的消费者将收到401响应。

1 个答案:

答案 0 :(得分:4)

尝试

 expect(response.response_code).to eq 401

 expect(response.status).to eq 401