ejv*_*dio 2 rspec ruby-on-rails rails-api ruby-on-rails-4
我正在运行 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
Run Code Online (Sandbox Code Playgroud)
在我的控制器中我有:
def create
@user = User.find_by_email(params[:uname])
if(@user && @user.valid_password?(params[:password]))
....
end
Run Code Online (Sandbox Code Playgroud)
这在浏览器中运行良好,我得到了 401 返回。但是当我运行 rspec 时,它只会挂起并且永远不会报告失败或通过,只是坐在那里没有错误。问题的症结似乎是 if(@user) 部分。如果我删除它,那么测试至少会运行。
我检查了 log/test.log,我可以在日志中看到Completed 401 Unauthorized in 14ms (Views: 0.2ms | ActiveRecord: 2.8ms) 。
更新
澄清一下,这是一个request spec. 我正在测试 API 的使用者是否会在电子邮件无效的情况下收到 401 响应。
尝试
expect(response.response_code).to eq 401
Run Code Online (Sandbox Code Playgroud)
或者
expect(response.status).to eq 401
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2490 次 |
| 最近记录: |