我注意到有几个规格根据运行的顺序间歇性地失败。
为了隔离它们,我正在寻找一个命令,在这个命令中,我可以输入种子号,并按照种子号决定的顺序,看到所有的规格和行号。 使用--format=documentation并没有提供所需的信息。
从那里我将注意到每次发生间歇性故障之前运行的测试列表,并最终缩小到我的罪魁祸首。
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"]
在我的 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
命令,再使用之前使用的顺序。
您可以使用 --bisect
选择权.
RSpec的
--order random
和--seed
选项有助于发现只有当一个或多个其他示例首先执行时才会失败的闪烁示例。要隔离触发失败的例子的确切组合可能非常困难。触发故障的--bisect
标志有助于解决这个问题。