我有一个有趣的难题。我正在开发一个库来解析 Ruby 中的 PSD。此外,一个伙伴正在同时开发一个库来解析 JavaScript 中的 PSD。我们希望通过 git 子模块共享相同的单元测试。
我们决定使用简单的 JSON DSL 来定义每个测试。单个测试可能如下所示:
{
"_name": "Layer should render out",
"_file": "test/fixtures/layer_out.psd",
"_exports_to": "test/controls/layer_out_control.png"
}
因此,现在由我们来构建适当的测试工具来将 JSON 转换为适当的本机单元测试。我一直在使用 MiniTest 让自己跟上进度,但我遇到了几堵墙。
这是我到目前为止所得到的。测试工具暂时命名TargetPractice
为:
# run_target_practice.rb
require 'target_practice'
TargetPractice.new(:test) do |test|
test.pattern = "test/**/*.json"
end
和
# psd_test.rb
class PSDTest < MiniTest::Unit::TestCase
attr_accessor :data
def tests_against_data
# do some assertions
end
end
和
# target_practice.rb
class TargetPractice
attr_accessor :libs, :pattern
def initialize(sym)
@libs = []
@pattern = ""
yield self
run_tests
end
def run_tests
FileList[@pattern].to_a.each do |file|
test_data = JSON.parse(File.open(file).read)
test = PSDTest.new(test_data["_name"]) do |t|
t.data = test_data
end
end
end
end
不幸的是,我很难yield
在课堂initialize
上坚持下去。PSDTest
此外,似乎测试将在初始化时立即运行。
我想动态创建一些MiniTest::Unit::TestCase
对象,设置它们适当的数据属性,然后运行测试。任何指针表示赞赏!