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

时间:2013-11-07 16:37:34

标签: ruby-on-rails ruby ruby-on-rails-3 rspec minitest

在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测试中都包含一个模块而不必在每次测试中重复自己?

3 个答案:

答案 0 :(得分: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完全相似,在每个spec文件的顶部都有一个require'spec_helper'。

答案 1 :(得分:3)

minitest并没有提供一种方式将includeextend模块放入每个测试类中,方式与RSpec相同。

您最好的选择是重新打开测试用例类(根据您使用的最小版本而不同)和include您想要的任何模块。您可能希望在test_helper或专用文件中执行此操作,该文件可让其他人知道您是最小的猴子修补程序。以下是一些例子:

对于minitest~> 4(您使用Ruby标准库获得的内容)

module MiniTest
  class Unit
    class TestCase
      include MyHelpers
    end
  end
end

对于最小的5 +

module Minitest
  class Test
    include MyHelperz
  end
end

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

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

希望这能回答你的问题!

答案 2 :(得分:0)

我要做的一件事就是创建一个继承自Test的{​​{1}}类。这允许我在我的基础测试类上进行任何类型的配置,并使其与我自己的项目 1 保持隔离。

Minitest::Test

1 这很可能是不必要的,但我喜欢保留所有宝石代码。