使用 Minitest 为所有测试设置 header 的最佳方法

Best way to set a header to all tests using Minitest

.嗨。我有这个 API 和一个自定义的 header,它需要在所有请求中传递给任何控制器。在 Minitest 中,我应该在每个测试中做 @request.headers['Custom-Header'] = 'Custom Value'。好吧,碰巧我有很多控制器,这段代码在每个文件的顶部 describe 块中重复。

我正在想办法制作这个 DRYer。我什至尝试过:

module Minitest::CustomHeaderSetup
  def before_setup
    super
    @request.headers['Custom-Header'] = 'Custom Value' if @request.present?
  end

  Minitest::Test.send(:include, self)
end

但是 @request 目前不存在。有什么想法吗?谢谢!

已解决!

Minitest::Test.send(:include, self) 将该代码应用于每个单独的测试文件,而不仅仅是控制器测试。所以,实际应该做的是:

module Minitest::CustomHeaderSetup
  def before_setup
    super
    @request.headers['Custom-Header'] = 'Custom Value'
  end
end

对于那些我们想要像这样表现的控制器测试文件,我们应该添加:

include Minitest::CustomHeaderSetup

更新

这会自动将自定义 header 设置为您所有的控制器测试。

module Minitest::CustomHeaderSetup                                                       
  def before_setup
    super
    @request.headers['Custom-Header'] = 'Custom Value'
  end

  ActionController::TestCase.send(:include, self)
end