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