在RSpec中的所有MiniTest测试中包含模块

Bvu*_*Ic7 10 ruby rspec ruby-on-rails minitest ruby-on-rails-3

在RSpec中我可以创建辅助模块 /spec/support/...

module MyHelpers
  def help1
    puts "hi"
  end
end
Run Code Online (Sandbox Code Playgroud)

并将其包含在每个规范中:

RSpec.configure do |config|
  config.include(MyHelpers)
end
Run Code Online (Sandbox Code Playgroud)

并在我的测试中使用它,如下所示:

describe User do
  it "does something" do
    help1
  end
end
Run Code Online (Sandbox Code Playgroud)

如何在所有MiniTest测试中包含一个模块,而不必在每次测试中重复自己?

Pet*_*ein 20

从Minitest README:

=== How to share code across test classes?

Use a module. That's exactly what they're for:

module UsefulStuff
  def useful_method
    # ...
  end
end

describe Blah do
  include UsefulStuff

  def test_whatever
    # useful_method available here
  end
end
Run Code Online (Sandbox Code Playgroud)

只需在文件中定义模块并使用require将其拉入.例如,如果在test/support/useful_stuff.rb中定义了'UsefulStuff',则可能在您的单个测试文件中需要'support/useful_stuff'.

更新:

为了澄清,在您现有的test/test_helper.rb文件或您创建的新test/test_helper.rb文件中,包括以下内容:

Dir[Rails.root.join("test/support/**/*.rb")].each { |f| require f }
Run Code Online (Sandbox Code Playgroud)

这将需要test/support子目录中的所有文件.

然后,在每个单独的测试文件中添加

require 'test_helper'
Run Code Online (Sandbox Code Playgroud)

这与RSpec完全类似,在每个spec文件的顶部都有一个require'pect_helper'行.


Pau*_*son 5

minitest 并不像 RSpec 那样为每个测试类提供一种方法include或一个模块。extend

您最好的选择是重新打开测试用例类(有所不同,具体取决于您使用的迷你测试版本)以及include您想要的任何模块。您可能希望在您自己的文件test_helper或专用文件中执行此操作,让其他人知道您正在进行猴子修补微型测试。这里有些例子:

对于 minitest ~> 4(通过 Ruby 标准库获得的内容)

module MiniTest
  class Unit
    class TestCase
      include MyHelpers
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

适用于迷你测试 5+

module Minitest
  class Test
    include MyHelperz
  end
end
Run Code Online (Sandbox Code Playgroud)

然后,您可以在测试中使用包含的方法:

class MyTest < Minitest::Test # or MiniTest::Unit::TestCase
  def test_something
    help1
    # ...snip...
  end
end
Run Code Online (Sandbox Code Playgroud)

希望这能回答您的问题!