我正在开发一个转换器,我使用rspec来检查转换后的值是否正确。为了检查值,我需要加载转换后的文件(用JSON编写)。所以我准备了一个在spec_helper.rb
中加载转换文件的方法。我在每个spec文件中使用:before
钩子调用此方法(但这不是这个问题的本质)。
然后,我想对多个转换结果运行相同的rspec测试。这是一个公正的形象。
file_names = [ 'file1', 'file2', 'file3' ] # OR use Dir.glob to get some file paths
file_names.each do |file|
all_rspec_tests( file )
end
请告诉我迭代某些文件名的最佳做法。我尝试了一些模式。
1)在Rakefile中,我们不能用RakeTask传递变量。然后我使用ENV(环境变量),如下所示:how to pass command-line parameter to Rspec script? 它没有预期的效果。特别是,RakeTast不会按顺序运行(看起来像在另一个线程上运行),因此每个测试都无法正常运行。
2)创建一个模块并使用它扩展RSpec,如下所示: Run the same spec multiple times w/ different filters 但这是使用JavaScript的模式。我不知道这种方法会成功。
答案 0 :(得分:0)
我通常使用:
system "rspec \"%s\" --format CustomFormatter --require environment" % file
但是你需要一个文件夹' spec'有两个文件custom_formatter.rb和environment.rb
custom_formatter.rb:
require "rspec/core/formatters/base_text_formatter"
require 'yaml'
class CustomFormatter < RSpec::Core::Formatters::BaseTextFormatter
def initialize(output)
super(output)
end
def example_started proxy
end
def example_passed proxy
p "\tPassed: " + proxy.description
end
def example_failed proxy
end
def example_group_started group
end
def example_group_finished group
end
end
environment.rb中:
require "rubygems"
require "watir-webdriver"
require "watir-webdriver/wait"
require "test/unit"
require 'system/report_html_template'
require "system/logger"
require "system/report"
require "rspec"
include Selenium
include Watir
RSpec.configure do |config|
config.fail_fast = true
config.before(:all) do
end
config.after(:all) do
end
end