1

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

module MyModule
  should 'work' do
    assert true
  end
end

然后在我的测试中:

class MyTest < ActiveSupport::TestCase
  require MyModule
end

问题是我得到了一个NoMethodError: undefined method should

我错过了什么?

4

2 回答 2

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
于 2014-08-13T21:13:51.907 回答
0

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

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

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

希望这对你有帮助

于 2014-08-06T21:41:46.850 回答