Ruby Minitest在模块中使用helper方法动态添加测试用例

Ruby Minitest在模块中使用helper方法动态添加测试用例,ruby,minitest,Ruby,Minitest,我正在尝试在名为SnapshotTest的模块中使用助手方法add\u snapshot\u test动态定义测试用例 我做了一些关于如何动态定义测试用例的研究,看起来像是在类内部定义测试用例,但在方法外部定义测试用例,如下所示: class ABCSnapshotTest < Minitest::Test include SnapshotTest #TODO: doesn't work add_snapshot_test('TX') do |filename| #.

我正在尝试在名为
SnapshotTest
的模块中使用助手方法
add\u snapshot\u test
动态定义测试用例

我做了一些关于如何动态定义测试用例的研究,看起来像是在类内部定义测试用例,但在方法外部定义测试用例,如下所示:

class ABCSnapshotTest < Minitest::Test
  include SnapshotTest

  #TODO: doesn't work
  add_snapshot_test('TX') do |filename|
    #...
  end
end
类方法与实例方法 ruby中的实例方法和类方法是不同的。不能对类调用实例方法,反之亦然。当我们调用一个方法时,ruby将在当前范围内找到
self
,并从其祖先链中找到方法定义

class ABCSnapshotTest < Minitest::Test
  extend SnapshotTest

  # self is ABCSnapshotTest 
  add_snapshot_test('TX') do |filename|
    #...
  end
end


add\u snapshot\u测试是一个实例方法,但您在类中调用了它。将
包含快照测试
替换为
扩展快照测试
应该可以工作。@Spikie谢谢!这定义了测试用例,但现在我无法从
add\u snapshot\u test
访问同一模块中的
snapshot\u dir
。我怎样才能解决这个问题?
class ABCSnapshotTest < Minitest::Test
  extend SnapshotTest

  # self is ABCSnapshotTest 
  add_snapshot_test('TX') do |filename|
    #...
  end
end
module SnapshotTest
  def snapshot_dir
    @current_dir ||= File.dirname(__FILE__)
    @snapshot_dir ||= File.join(@current_dir, 'snapshots')
  end

  def add_snapshot_test(snapshot_filename, &block)
    class << self
      define_method("test_#{snapshot_filename}") do
        # ...

        assert_equal(snapshot, output, "#{self.class.name} output doesn't match the snapshot")
      end
    end
  end
end

singleton_class.instance_eval do
  define_method("test_#{snapshot_filename}") do
        # ...

     assert_equal(snapshot, output, "#{self.class.name} output doesn't match the snapshot")
  end
end