Best way to set a header to all tests using MiniTest

在使用 Rails 构件 API 应用的时候,通常会把用户的 token 放在 request.header 中。在测试时候,我们可以通过下面的方式,给所有的 controller test 文件都加上 token

# test/lib/custom_header_setup.rb
module CustomHeaderSetup                                                       
  def before_setup
    super
    @request.headers['Custom-Header'] = 'Custom Value'
  end
  ActionController::TestCase.send(:include, self)
end

test/test_helper.rb 引入该文件:

require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require 'support/custom_header_setup'

class ActiveSupport::TestCase
  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all

  # Add more helper methods to be used by all tests here...
end

问题来了,Rails 5 的功能测试已经不再继承 ActionController::TestCase,而改为继承 ActionDispatch::IntegrationTest。并且取消了 @request 变量,我们需要用下面的方式来设置 header。

get admin_path, headers: {'HTTP_AUTHORIZATION' => something }

如果觉得我的文章对您有用,请在支付宝公益平台找个项目捐点钱。 @Victor May 8, 2017

奉献爱心