10

在 RSpec 我可以在/spec/support/...

module MyHelpers
  def help1
    puts "hi"
  end
end

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

RSpec.configure do |config|
  config.include(MyHelpers)
end

并像这样在我的测试中使用它:

describe User do
  it "does something" do
    help1
  end
end

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

4

3 回答 3

20

来自 Minitest 自述文件:

=== 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

只需在文件中定义模块并使用 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 }

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

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

require 'test_helper'

这与 RSpec 完全相同,在每个规范文件的顶部都有一个 require 'spec_helper' 行。

于 2013-11-07T16:42:37.943 回答
4

minitest 并没有像 RSpec 那样提供进入每个测试类的方法include或模块。extend

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

对于 minitest ~> 4(你从 Ruby 标准库中得到的)

module MiniTest
  class Unit
    class TestCase
      include MyHelpers
    end
  end
end

适用于 minitest 5+

module Minitest
  class Test
    include MyHelperz
  end
end

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

class MyTest < Minitest::Test # or MiniTest::Unit::TestCase
  def test_something
    help1
    # ...snip...
  end
end

希望这能回答你的问题!

于 2013-11-15T22:52:36.753 回答
0

我要做的一件事是创建我自己的Test类,继承自Minitest::Test. 这使我可以对我的基本测试类进行任何类型的配置,并将其与我自己的项目1隔离。

# test_helper.rb
include 'helpers/my_useful_module'
module MyGem
  class Test < Minitest::Test
    include MyUsefulModule
  end
end

# my_test.rb
include 'test_helper'
module MyGem
  MyTest < Test
  end
end

1这很可能是不需要的,但我喜欢保持我所有的 gem 代码隔离。

于 2015-07-31T01:32:08.250 回答