Остановите cucumberJs, когда сценарий не удастся - транспортир и cucumberjs

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

Я использую реализацию javascript огурца, cucumberJs с транспортиром.

Вот что у меня есть, но не работает:

hooks.js

 this.registerHandler('AfterScenario', function (scenario, callback) {
    console.log('\n After each scenario...');
    if (scenario.isFailed() ===true) {
      console.log('\n Scenario failed \n\n\n\n\n\n\n...');
      callback.fail(new Error("\n\n\n\nThis scenario definitely failed!!"));
    }
  });

Я включил этот hook.js в свой protractor.conf.js следующим образом:

 cucumberOpts: {
    require: [
      conf.paths.e2e + '/utilities/hooks.js', 
    ],
  }

Я знаю, что ловушка запускается из сообщения об ошибке ниже; однако не могу понять, почему и как исправить ошибку:

e #01-1] Specs failed ? : C:\someFeature.feature
[chrome #01-1] Scenario failed! Creating snapshot at: C:\someFeature.png
[chrome #01-1]
[chrome #01-1]
[chrome #01-1]  After each scenario...
[chrome #01-1] TypeError: e2e\utilities\hooks.js:34 scenario.isFailed is not a function
[chrome #01-1]     at C:\Hooks.js:36:18
[chrome #01-1]     at nextTickCallbackWith0Args (node.js:420:9)
[chrome #01-1]     at process._tickCallback (node.js:349:13)

person pelican    schedule 20.09.2016    source источник


Ответы (2)


Если я прав, в огурце есть опция fail-fast, которая не работает в сценариях, если не удается первый. Попробуйте -

  cucumberOpts: {
  require: [
  conf.paths.e2e + '/utilities/hooks.js', 
  ],
  format: 'pretty',
  'fail-fast': true
  },

Думаю, цитаты нужны!

person Ram Pasala    schedule 21.09.2016
comment
Это работает Ram; но он останавливает дальнейшее выполнение набора тестов. Я имел в виду следующее: a) Запустить все тесты в массовом порядке (набор тестов), но если один из тестов завершится сбоем, быстро завершиться, т.е. прекратить выполнение этого теста с ошибкой и перейти к следующему тесту в массиве / наборе. б) Если снова третий тест в наборе не удается, прекратите его выполнение, чтобы сэкономить время, и переходите к следующему тесту. Прямо сейчас ваше решение останавливает выполнение неудачного теста от дальнейшего, что хорошо, но оно не выполняет никаких других тестов в наборе. Любая идея? - person pelican; 21.09.2016

Сплошной вопрос - похоже, что в cucumber-js 1.3.1 и ранее ошибки, возникающие во время этих перехватов registerHandler, будут считаться фатальными и прервут тестовый прогон в случае сбоя; Похоже, что 2.0.0-rc.6 лучше обрабатывает ошибки registerHandler, передаваемые обратному вызову в таких событиях, как AfterScenario, хотя настройка 2.0.0 потребует некоторой реструктуризации на стороне пользователя при определении их stepdefs.

Чтобы обойти это в моем случае использования с 1.3.1, я вытащил желаемый код AfterScenario в шаг, который я явно добавляю в конец сценария - немного громоздко.

person kian    schedule 06.03.2017