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)