2013-04-18 2 views
2

Есть ли какой-то программный способ заставить rspec-тест остановиться при первом сбое?Остановить выполнение конкретного теста rspec (а не набора тестов) при первом сбое

Например,

  1. У меня есть набор тестов с несколькими RSpec тестов и я запускать их все сразу.
  2. Каждого RSpec тест расположен в отдельном spec.rb файле

Если какой-то происходит сбой в любом из этих тестов, я хотел бы, чтобы остановить выполнение этого конкретного теста далее конкретного этап проверки, которые не удались, но не останавливать выполнение всего тестового набора, который я запускаю.

Я знаю, что есть следующий способ:

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

Но определив его в любом из спецификации файлов, которые я побежал в моем наборе тестов вызывает выполнение все свиты на провал.

В любом случае этот случай можно обработать?

Заранее спасибо

+0

Трудно понять, что именно вы хотите, но имеете ли вы в виду, можно ли остановить все тесты, запущенные в конкретном файле, если произошел сбой при продолжении выполнения других тестов в пакете? Если да, я не уверен, что это возможно. Если вы имеете в виду, можно ли, скажем, запустить весь набор тестов, но сразу же отобразить все сообщения об ошибках, чтобы вы могли их исследовать, пока ваши другие тесты все еще продолжают работать, а затем попробуйте [Fuubar gem] (https: // github. ком/jeffkreeftmeijer/fuubar). –

+0

Итак, моя идея следующая: 1. У меня есть 5 специальных тестов в моем тестовом наборе 2. Каждый из этих тестов находится в отдельном файле спецификации 3. Каждый тест содержит пару контекстов, в которых выполняется некоторая проверка. 4. Я запускаю команду rspec. для запуска полного набора тестов 5. Когда что-то терпит неудачу в одном контексте внутри одного теста (один файл), я хочу прекратить выполнение в этом конкретном контексте и не идти дальше в этом тесте, а выполнять другие файлы спецификаций. Есть ли шанс, что это можно сделать? –

ответ

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 

Логика здесь должен быть понятно. Продолжайте выполнение примеров до тех пор, пока не произойдет исключение, а затем пропустите остальные примеры для этой спецификации. Обход каждого крючка облегчает эту логику, так как он может контролировать выполнение каждого примера. См. RSpec documentation для получения дополнительной информации об крюке «вокруг».

Смежные вопросы