RSpec 控制台日志返回 302,但测试日志显示 401



我编写了一个简单的测试来检查用户是否无法使用before_action :authenticate_user!发布到控制器中。测试内容如下:

context 'when the user is not logged in' do
  it 'returns 401' do
    sign_out user
    post wikis_path(params: wiki)
    expect(response).to have_http_status(401)
  end
end

控制台中的输出为:

Failure/Error: expect(response).to have_http_status(401)
       expected the response to have status code 401 but it was 302

但是当我检查测试日志时,它确实显示 401:

Processing by WikisController#create as HTML
  Parameters: {"wiki"=>{"content"=>"Some content"}}
Completed 401 Unauthorized in 4ms (ActiveRecord: 0.0ms)

此外,我可以打开浏览器,删除身份验证cookie并验证它确实响应401。

起初,我认为重定向是 Devise 行为,因为它说它在他们的评论中,但是日志或行为都没有这样做。有一个类似的(旧(问题,即用户不使用Devise,但得到相同的结果。我承认,我无法理解所有的 Devise 代码,但我能够查找并一直按照 Rails 代码中的authenticate_or_request_with_http_token直到最后,看看它应该(在他的情况下(返回 401。

是什么导致控制台中失败的测试/输出与test.log中记录的结果之间存在分歧?

实际上,第一个状态代码是 302(重定向(,然后下一个是 401。我不知道为什么test.log没有显示 302。以下是重定向案例的脚本(参考: https://relishapp.com/rspec/rspec-rails/docs/matchers/have-http-status-matcher(

context 'when the user is not logged in' do
  it 'returns 401' do
    sign_out user
    post wikis_path(params: wiki)
    expect(response).to have_http_status(302)
    follow_redirect!
    expect(response).to have_http_status(401)
  end
end

相关内容

  • 没有找到相关文章

最新更新