ruby 耙测试任务:基于命令行参数运行单个测试

kcugc4gi  于 2023-04-20  发布在  Ruby
关注(0)|答案(1)|浏览(143)

我目前使用JSON文件动态生成测试,如下所示:
Rakefile:

#...
Rake::TestTask.new(:run_spec_tests) { |t|
  t.libs = ['lib']
  t.pattern = 'test/test_spec.rb'
  t.verbose = true
  t.warning = false
}

test/test_spec.rb

class TestSpec < Minitest::Test
  cases = JSON.parse(open('test/tests.json', 'r').read)
  cases.each do |testcase|
    # run hundreds of tests
    define_method("test_example_#{testcase['example']}") do
      puts "Testing example #{testcase['example']}"
      actual = mything.render(testcase['input'])
      assert_equal testcase['output'], actual, testcase['output']
    end
  end
end

JSON文件中的每个对象都有一个相关的编号,所以我希望能够引用其中一个测试,并让Rake::TestTask完成它的工作。
不幸的是,似乎没有一种方法可以将参数传递给TestTask,如

rake test run_spec_test 123

这样TestTask就可以只运行前面动态定义的方法之一。
我错过什么了吗?

uplii1fm

uplii1fm1#

必须使用环境变量。请参阅TestTask的文档
这是从单个文件运行单个测试:

$ bundle exec rake test TEST=test/gnuplot_printer_test.rb TESTOPTS='"--name=/^test: grouping and xtics - a nice example$/"'

但请注意,如https://github.com/ruby/rake/issues/490中所报告的,-n目前无法工作
P.S.这与minitest不同,minitest通过将空格替换为下划线_来生成方法名称。

相关问题