Подтвердить что ты не робот

Обнаружение сбоя теста Rspec после каждого метода

Я пытаюсь запустить RSpec-тест, и я хочу определить, не прошел ли тест в методе after. У меня есть что-то вроде этого прямо сейчас:

after(:each) do
  cc = ConnectController.new()
  cc.update(<TEST-SERVER-CONTROLLER>, <TC-RESULT-ID>, result?)    
end

Как вы можете видеть, функция result? - это то, что мне нужно заменить, чтобы обнаружить, если тест терпит неудачу или нет, а также получить информацию о провале теста.

4b9b3361

Ответ 1

В дополнение к ответу Дэниела, в Rspec3 был удален пример метода (см. Здесь для получения дополнительной информации).

Вам нужно будет сделать что-то вроде этого:

after(:each) do |example|
  if example.exception
    # ...
  end
end

Ответ 2

EDIT: этот ответ применим только для RSpec 2. для RSpec 3 см. гиказоидный ответ.

После каждого блока выполняется в контексте класса, который предоставляет example, и вы можете обнаружить сбои, проверив метод exception на example:

after(:each) do
  if example.exception != nil
    # Failure only code goes here
  end
end

Ответ 3

Я искал, как проверить, если успех для всех примеров в группе в блоке after(:context)/after(:all). Вот что я придумала:

after(:all) do |example_group|
  all_groups = example_group.class.descendants
  failed_examples = all_groups.map(&:examples).flatten.select(&:exception)

  if failed_examples.empty?
    # runs only if there are no failures
    do('something')
  end
end