1

我用 Protractor 和 Gulp 设置了 CucumberJS。我遵循了此处提供的文档: https ://github.com/cucumber/cucumber-js

我有我的功能文件和步骤定义文件。我还在支持文件夹中创建了 world.js 文件,并将其加载到我的步骤定义文件中:

this.World = require("../support/world.js").World;

因此,与文档中介绍的方式相同。直到这一刻一切正常。

我试着在我的箱子里加一些黄瓜钩。我按照文档中的建议在支持文件夹中创建了 hooks.js 文件,因此:

// features/support/hooks.js (this path is just a suggestion)

var myHooks = function () {
 this.Before(function (callback) {
    // Just like inside step definitions, "this" is set to a World instance.
    // It's actually the same instance the current scenario step definitions
    // will receive.

    // Let's say we have a bunch of "maintenance" methods available on our World
    // instance, we can fire some to prepare the application for the next
    // scenario:

    console.log("Before hook");

    // Don't forget to tell Cucumber when you're done:
    callback();
  });
};

module.exports = myHooks;

文档没有说明应该如何在我的步骤定义中加载这个 hook.js 文件,所以我假设它以某种方式加载了“约定优于配置”的方法。不幸的是,该文件未加载,并且未执行 Before 方法。

有任何想法吗?

4

2 回答 2

1

如果钩子与 step_definitions 不在同一个文件夹中,则需要明确指定钩子使用的位置--require。例如,

 cucumber.js test/functional/features/xyz.feature 
--require test/functional/step_definitions/ 
--require features/support/ --format=pretty

为了避免这种情况,我通常将我的钩子放在 step_definitions 文件夹下。由于无论如何您都需要为 step_definitions 指定 require ,因此您无需为 hooks 显式指定 require 。所以让我们说如果你的钩子在test/functional/step_definitions/,跟随你的钩子应该被调用。

 cucumber.js test/functional/features/xyz.feature 
--require test/functional/step_definitions/ 
--format=pretty
于 2015-07-02T16:40:29.747 回答
1

一旦你有了你的hooks.js文件,进入你cucumberOptsprotractor.conf.js文件并在那里添加你的 hooks.js 文件的路径,就是这样,你的 hooks.js 文件将被加载。

cucumberOpts: {
    require: [
      conf.paths.e2e + '/steps/**/*Steps.js',
      conf.paths.e2e + '/utilities/hooks.js',
    ],
    tags: ['~@wip', '~@manual'],
    format: 'pretty'
  }

您还可以在您的hooks.js文件中包含console.log('Was my hook loaded')并稍后搜索该日志文本以确保您的 hook 已正确加载。

于 2016-09-12T20:57:17.927 回答