无法在模块中包含shoulda测试

时间:2014-08-06 21:29:31

标签: ruby minitest shoulda ruby-2.1

我正在使用带有MiniTest的Rails,并且有几个类都通过继承相关。我想通过将测试放在模块中来重用测试。像这样:

module MyModule
  should 'work' do
    assert true
  end
end

然后在我的测试中:

class MyTest < ActiveSupport::TestCase
  require MyModule
end

问题是我得到NoMethodError: undefined method should

我错过了什么?

2 个答案:

答案 0 :(得分:1)

1)这不是require的用途。

2a)您可能希望extend一个模块并定义一个可以调用的方法。

module MyModule
  def should_work
    should 'work' do
      assert true
    end
  end
end

class MyTest < ActiveSupport::TestCase
  extend MyModule
  should_work
end

2b)或者,您只需extend模块并通过Module.extended自动调用测试:

module MyModule
  def self.extended(base)
    base.should_work
  end

  def should_work
    should 'work' do
      assert true
    end
  end
end

class MyTest < ActiveSupport::TestCase
  extend MyModule
end

2c)您也可以将所有内容都放在Module.extended中:

module MyModule
  def self.extended(base)
    base.should 'work' do
      assert true
    end
  end
end

class MyTest < ActiveSupport::TestCase
  extend MyModule
end

答案 1 :(得分:0)

您需要在MyTest类中要求您的模块文件,在顶部:

require 'spec_helper'
require_relative '../spec/modules/module_file_name'

或者您可以将此relative_path放入spec_helper,而不仅仅需要'spec_helper'。

希望这能帮到你