POST 授权问题:没有将 nil 隐式转换为 String
POST Authorization trouble: no implicit conversion of nil into String
有时当我 运行 测试时我会收到这个错误:
TypeError: no implicit conversion of nil into String
,这是由这段代码引起的:
params = {
.....
}
auth_headers = {
'Authorization': "Basic #{Base64.encode64('XXX:XXX')}"
}
post back_request_url, params: params, headers: auth_headers
back_request_url
路径有效,参数相同。当授权失败时,我得到(应该是)只是 401
- 但是,当授权通过时 - 然后会发生此错误。
这是 rails 中的内容 - 此操作不会进入 back_request_url
提供的操作。
它可能是什么?
我的 rails 版本是 5.1.3
#FIXED
问题 - 测试开始时已设置授权参数(名称和密码):
test 'failure no id' do
MyGem.auth_name = 'xxx'
MyGem.auth_pass = 'xxx'
params = {
...
....
(no id)
}
post back_request_url, params: params, headers: @auth_headers
assert_response 400
end
以及操作:
class BackRequestController < ApplicationController
protect_from_forgery except: [:new]
http_basic_authenticate_with name: MyGem.auth_name, password: MyGem.auth_pass
...
测试开始时,它们有时不会被设置和刷新。
解决方案
简单:)
class BackRequestControllerTest < ActionDispatch::IntegrationTest
include Engine.routes.url_helpers
setup do
MyGemauth_name = 'xxx'
MyGem.auth_pass = 'xxx'
@auth_headers = {
'Authorization': "Basic #{Base64.encode64(MyGem.auth_name. + ':' + MyGem.auth_pass)}"
}
end
...
...
...
(TESTS)
有时当我 运行 测试时我会收到这个错误:
TypeError: no implicit conversion of nil into String
,这是由这段代码引起的:
params = {
.....
}
auth_headers = {
'Authorization': "Basic #{Base64.encode64('XXX:XXX')}"
}
post back_request_url, params: params, headers: auth_headers
back_request_url
路径有效,参数相同。当授权失败时,我得到(应该是)只是 401
- 但是,当授权通过时 - 然后会发生此错误。
这是 rails 中的内容 - 此操作不会进入 back_request_url
提供的操作。
它可能是什么?
我的 rails 版本是 5.1.3
#FIXED
问题 - 测试开始时已设置授权参数(名称和密码):
test 'failure no id' do
MyGem.auth_name = 'xxx'
MyGem.auth_pass = 'xxx'
params = {
...
....
(no id)
}
post back_request_url, params: params, headers: @auth_headers
assert_response 400
end
以及操作:
class BackRequestController < ApplicationController
protect_from_forgery except: [:new]
http_basic_authenticate_with name: MyGem.auth_name, password: MyGem.auth_pass
...
测试开始时,它们有时不会被设置和刷新。
解决方案
简单:)
class BackRequestControllerTest < ActionDispatch::IntegrationTest
include Engine.routes.url_helpers
setup do
MyGemauth_name = 'xxx'
MyGem.auth_pass = 'xxx'
@auth_headers = {
'Authorization': "Basic #{Base64.encode64(MyGem.auth_name. + ':' + MyGem.auth_pass)}"
}
end
...
...
...
(TESTS)