4

我想阻止 cucumber 一直运行失败的测试,因为这会浪费我们持续集成的时间,因为我们需要快速反馈。

我正在使用带有量角器的黄瓜 cucumberJs 的 javascript 实现。

这是我拥有但不起作用的内容:

钩子.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)
4

2 回答 2

2

如果我是正确的fail-fast,黄瓜中有一个选项会在第一个失败的情况下失败。试试看-

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

我认为引号是必需的!

于 2016-09-21T10:14:33.207 回答
0

坚实的问题 - 看起来在 cucumber-js 1.3.1 及之前的版本中,在这些 registerHandler 挂钩期间引发的错误将被认为是致命的,并且会在失败时终止测试运行;看起来 2.0.0-rc.6 对在 AfterScenario 等事件中传递给回调的 registerHandler 错误有更好的处理,尽管设置 2.0.0 将需要在用户端进行一些重组以定义他们的 stepdef。

为了在我的 1.3.1 用例中解决这个问题,我将所需的 AfterScenario 代码拉到我明确添加到场景末尾的步骤中——有点笨重。

于 2017-03-06T20:15:27.173 回答