我正在尝试RSpec并考虑一个只有在测试套件通过时才会改变随机种子的系统。我试图在after(:suite)
块中实现它,该块在RSpec::Core::ExampleGroup
对象的上下文中执行。
虽然RSpec::Core::Example
有一个方法“异常”,允许您检查是否有任何测试失败,但在RSpec::Core::ExampleGroup
或任何访问者列表中似乎没有类似的方法。例子。那么,我该如何检查测试是否通过?
我知道这可以使用自定义格式化程序来跟踪是否有任何测试失败,但格式化过程似乎不利于影响测试的实际运行。
答案 0 :(得分:6)
我在RSpec源代码中探讨了一下,并发现以下内容可行。只需将此代码放在spec_helper.rb
或运行测试时加载的其他文件中:
RSpec.configure do |config|
config.after(:suite) do
examples = RSpec.world.filtered_examples.values.flatten
if examples.none?(&:exception)
# change the seed here
end
end
end
RSpec.world.filtered_examples
哈希将示例组与该组中的示例数组相关联。 Rspec具有过滤某些示例的功能,并且此哈希似乎仅包含实际运行的示例。
您可以设置系统的另一种方法是检查rspec流程的返回代码。如果它为0,则所有测试都通过,您可以更改种子。
在shell脚本中,您可以定义一个更改种子的命令并运行:
rspec && change_seed
如果您的项目有Rakefile,您可以设置如下内容:
task "default" => "spec_and_change_seed"
task "spec" do
sh "rspec spec/my_spec.rb"
end
task "spec_and_change_seed" => "spec" do
# insert code here to change the file that stores the seed
end
如果规格失败,则rake的“spec”任务将失败,并且不会继续更改种子。