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

Jes*_*nac 5 tdd bdd minitest rails-api ruby-on-rails-4

.Hi.我有这个API,以及一个自定义标头,需要将所有请求传递给任何控制器.在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
Run Code Online (Sandbox Code Playgroud)

@request此刻并不存在.有什么想法吗?谢谢!

Jes*_*nac 6

解决了!

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

module Minitest::CustomHeaderSetup
  def before_setup
    super
    @request.headers['Custom-Header'] = 'Custom Value'
  end
end
Run Code Online (Sandbox Code Playgroud)

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

include Minitest::CustomHeaderSetup
Run Code Online (Sandbox Code Playgroud)

UPDATE

这会自动将自定义标头设置为所有控制器测试.

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

  ActionController::TestCase.send(:include, self)
end
Run Code Online (Sandbox Code Playgroud)