2013-04-18 42 views
2

是否有某种编程方式来强制rspec测试在第一次失败时停止?在第一次失败时停止执行特定的rspec测试(不是测试套件)

例如,

  1. 我有一个测试套件夫妇的RSpec的测试,我在一次运行它们。
  2. 每个RSpec的测试位于单独spec.rb文件

如果在这些测试中发生了一些问题,我想进一步阻止在那个特定的测试步骤失败的具体测试的执行,但不要停止执行我正在运行的整个测试套件。

我知道有一种方式如下:

RSpec.configure do |c| 
    c.fail_fast = true 
end 

但在任何我在我的测试套件运行规范文件的定义它会导致套件的所有执行失败。

任何方式可以处理这种情况?

在此先感谢

+0

确切地理解你想要的东西有点困难,但是你的意思是如果可以停止在特定文件中运行的所有测试(如果发生故障的同时仍继续在套件中运行其他测试)?如果是这样,我不确定这是否可能。如果你的意思是可以运行整个测试套件,但是立即显示任何失败信息,以便在其他测试仍然可以继续运行的同时进行调查,那么请尝试[Fuubar gem](https:// github)。 COM/jeffkreeftmeijer/fuubar)。 –

+0

所以我的想法如下: 1.我有我的测试套件中的5个spec测试 2.每个测试都在单独的spec文件中 3.每个测试都包含一些验证完成的上下文。 4.我运行命令rspec。运行完整的测试套件 5.当一个测试(一个文件)内的某个上下文中出现某些内容失败时,我想停止执行该特定上下文,而不是在该测试中继续执行,而是执行其他spec文件。 这是可以做到的吗? –

回答

3

我知道这是一个老问题,但我碰到它绊倒了,而在寻找实现这一相同的行为自己。经过无数次的搜索之后,我想出了一些相当直接的实现,它实际上提供了所需的行为!

只需添加下列各规格文件来跳过随后的实施例(在该特定文件)在发生异常时:

before :all do 
    $continue = true 
    end 

    around :each do |example| 
    if $continue 
     $continue = false 
     example.run 
     $continue = true unless example.exception 
    else 
     example.skip 
    end 
    end 

的这里逻辑应该是不言自明。继续运行示例,直到发生异常,然后跳过该规范的其余示例。由于每个钩子可以控制每个示例的执行,所以它很好地促进了该逻辑。有关“around”钩子的更多信息,请参阅RSpec documentation