按rspec中种子的顺序列出所有规格。

问题描述 投票:6回答:3

我注意到有几个规格根据运行的顺序间歇性地失败。

为了隔离它们,我正在寻找一个命令,在这个命令中,我可以输入种子号,并按照种子号决定的顺序,看到所有的规格和行号。 使用--format=documentation并没有提供所需的信息。

从那里我将注意到每次发生间歇性故障之前运行的测试列表,并最终缩小到我的罪魁祸首。

ruby-on-rails rspec
3个回答
12
投票

RSpec的JSON格式化器按照运行的顺序输出文件名和行号。

rspec --seed 1 -f json > out.json

要想只得到文件名和行号的列表,就必须从结果中得到... out.json 文件。

require 'json'
data = JSON.parse(File.read('out.json'))
examples = data['examples'].map do |example| 
  "#{example['file_path']}:#{example['line_number']}"
end

现在 examples 将包含一个文件路径数组,如

["./spec/models/user_spec.rb:19", "spec/models/user_spec.rb:29"]

1
投票

在我的 spec/spec_helper.rb 文件。

我创建了一个全局变量 $files_executed 并将其初始化为一个空集。

require 'set'
$files_executed = Set.new

然后,在 RSpec.configure 块我加。

config.before(:each) do |example|
  $files_executed.add example.file_path
end

还有这个

config.after(:suite) do
  files_filename = 'files_executed.txt'
  File.write(files_filename, $files_executed.to_a.join(' '))
end

然后你可以使用文件的内容。files_executed.txt 养活 rspec 命令,再使用之前使用的顺序。


0
投票

您可以使用 --bisect 选择权.

RSpec的 --order random--seed 选项有助于发现只有当一个或多个其他示例首先执行时才会失败的闪烁示例。要隔离触发失败的例子的确切组合可能非常困难。触发故障的 --bisect 标志有助于解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.