如何比较两个RSpec套件运行的结果?

时间:2011-08-12 09:22:59

标签: ruby rspec rspec2

我有一个非常大的规范套件(watirspec),我在Ruby gem(safariwatir)上运行它并且有很多失败:

1002 examples, 655 failures, 1 pending

当我在gem中进行更改并再次运行套件时,有时很多先前失败的规范通过(在此示例中为52):

1002 examples, 603 failures, 1 pending

我想知道哪些以前失败的规格现在正在通过,当然,如果之前传递的任何规格现在都失败了。我现在要做的是比较结果是使用--format documentation选项运行测试并将结果输出到文本文件,然后区分文件:

rspec --format documentation --out output.txt

有更好的方法吗?比较文本文件并不是查看更改内容的最简单方法。

3 个答案:

答案 0 :(得分:1)

只需将结果保存到您现在正在执行的文件中,然后使用一些随机差异工具来区分这些结果。

答案 1 :(得分:0)

我不知道那里能做到什么。说,如果你需要它如此糟糕,你不介意花一些时间来攻击你自己的格式化程序,看看Spec::Runner::Formatter::BaseFormatter。这是很好的记录。

答案 2 :(得分:0)

我已经为您实施了@ Serabe的解决方案。请参阅要点:https://gist.github.com/1142145

将文件my_formatter.rb放入spec文件夹并运行rspec --formatter MyFormatter。格式化程序会将当前运行结果与之前的运行结果进行比较,并将差异输出为表格。

注意:格式化程序在当前文件夹中创建/覆盖文件result.txt

使用示例:

D:\Projects\ZPersonal\equatable>rspec spec --format MyFormatter
..........
No changes since last run

Finished in 0.011 seconds
10 examples, 0 failures

No changes since last run行由格式化程序添加。

现在我故意打破一个并重新运行rspec:

D:\Projects\ZPersonal\equatable>rspec spec --format MyFormatter
..F.......
Affected tests (1).
PS CS Description
.  F  Equatable#== should be equal to the similar sock
PS - Previous Status
CS - Current Status

Failures:

  1) Equatable#== should be equal to the similar sock
     Failure/Error: subject.should == Sock.new(10, :black, 0)
       expected: #<Sock:0x2fbb930 @size=10, @color=:black, @price=0>
            got: #<Sock:0x2fbbae0 @size=10, @color=:black, @price=20> (using ==)
       Diff:
       @@ -1,2 +1,2 @@
       -#<Sock:0x2fbb930 @color=:black, @price=0, @size=10>
       +#<Sock:0x2fbbae0 @color=:black, @price=20, @size=10>
     # ./spec/equatable_spec.rb:30:in `block (3 levels) in <top (required)>'

Finished in 0.008 seconds
10 examples, 1 failure

Failed examples:

rspec ./spec/equatable_spec.rb:29 # Equatable#== should be equal to the similar sock

格式化程序添加了受影响规格的表:

Affected tests (1).
PS CS Description
.  F  Equatable#== should be equal to the similar sock
PS - Previous Status
CS - Current Status

如果当前和上一次运行之间某些规格状态不同,格式化程序将输出先前状态,当前状态和规格说明。 ''代表通过的规格,'F'表示失败,'P'表示未决。

代码远非完美,所以请随意批评并随意更改代码。

希望这会有所帮助。如果您有任何疑问,请告诉我。