gpt4 book ai didi

ruby-on-rails - Rails 5.2 中的 nil 响应对象,用于 GET 请求的 RSpec-Rails 3.7 规范

转载 作者:行者123 更新时间:2023-12-04 03:37:37 25 4
gpt4 key购买 nike

我一直对此低头,觉得我可能犯了一个简单的错误,但我无法找到关于这个问题的任何信息。

我有一些 Rails 5 的请求规范,当我测试重定向时——但不是渲染模板——我得到一个错误,undefined method 'response_code' for nil:NilClass .原因似乎是 @responsenil当匹配器被调用时(在 ActionDispatch::Assertions::ResponseAssertions 代码中,而不是在我的代码中)。我可以使用 cURL 向 API 发出请求,它会按预期返回响应。返回错误的地方在这里(这是 ActionDispatch 代码):

def generate_response_message(expected, actual = @response.response_code)
"Expected response to be a <#{code_with_name(expected)}>,"\
" but was a <#{code_with_name(actual)}>"
.dup.concat(location_if_redirected).concat(response_body_if_short)
end

注意第一行, actual 的默认值参数设置为 @response.response_code .

这是我的测试代码:
RSpec.describe "Admin registrations", type: :request do
describe "new sign-up" do
subject { get new_admin_registration_path }

it "redirects to home" do
expect(subject).to redirect_to(new_admin_session_path)
end
end
end

测试日志中的相关行是:
Started GET "/admins/sign_up" for 127.0.0.1 at 2018-07-05 10:44:05 -0700
Processing by Admins::RegistrationsController#new as HTML
Redirected to http://example.org/admins/sign_in
Completed 301 Moved Permanently in 18ms (ActiveRecord: 0.0ms)

有趣的是,当我使用 byebug 检查 subject 的值时,它确实返回一个 Rack::MockResponse 对象,所以这在某种程度上没有通过。

非常感谢我能得到的任何帮助!

最佳答案

我确定您可能已经解决了这个问题,但是对于可能偶然发现此问题的其他人,我们遇到了同样的事情( response 在请求方式发出后未分配 - getpost ,没有尝试其他方法,但假设它们都是相同的)。一直在工作的现有请求规范都开始失败。

在我们的案例中,罪魁祸首被追查到 rails_helper.rb 中所需的模块。 , 并添加到 rspec 的 config.include列表:

config.include ApiHelper, type: request

内部 AppHelper是根本原因:
include Rack::Test::Methods

注释掉这条线(最终对我们来说,删除整个助手,因为它并不是真正需要的)将请求规范恢复到它们以前的工作状态。

tl;博士:

确保您不包括 Rack::Test::Methodsconfig.include无意中为您的 rspec 配置。

关于ruby-on-rails - Rails 5.2 中的 nil 响应对象,用于 GET 请求的 RSpec-Rails 3.7 规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51181821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com