0

我正在开发一个转换器,我使用 rspec 检查转换的值是否正确。为了检查值,我需要加载转换后的文件(用 JSON 编写)。所以我准备了一种方法来将转换后的文件加载到spec_helper.rb. 我用钩子在每个规范文件中调用这个方法: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(环境变量),如下所示:如何将命令行参数传递给 Rspec 脚本? 它没有按预期工作。特别是,RakeTast 不会按顺序运行(看起来像是在另一个线程上运行),因此每个测试都没有正确运行。

2)制作一个模块并用它扩展RSpec:使用 不同的过滤器多次运行相同的规范 但这是使用JavaScript的一种模式。而且我不知道这种方法会成功。

4

1 回答 1

0

我通常使用:

system "rspec \"%s\" --format CustomFormatter --require environment" % file

但是您需要一个包含两个文件 custom_formatter.rb 和 environment.rb 的文件夹“spec”

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

环境.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
于 2013-01-25T20:21:08.160 回答