用参数多次运行rspec

时间:2012-09-26 16:09:30

标签: ruby rspec rspec2

我正在开发一个转换器,我使用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的模式。我不知道这种方法会成功。

1 个答案:

答案 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