Загрузка хуков в CucumberJS с помощью Protractor и Gulp

Я устанавливаю CucumberJS с Protractor и Gulp. Я следовал документации, доступной здесь: 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 не выполняется.

Любые идеи?


person Jakub    schedule 02.07.2015    source источник


Ответы (2)


Если хуки НЕ находятся в той же папке, что и ваши step_definitions, вам нужно явно указать, где ваши хуки используют --require. Например,

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

Чтобы избежать этого, я обычно держу свои хуки в папке step_definitions. Так как вам все равно нужно указывать require для step_definitions, вам не нужно явно указывать require для хуков. Итак, скажем, если ваши хуки находятся в test/functional/step_definitions/, после них должны быть вызваны ваши хуки.

 cucumber.js test/functional/features/xyz.feature 
--require test/functional/step_definitions/ 
--format=pretty
person nilesh    schedule 02.07.2015
comment
Спасибо! Это может сработать, но у меня другая структура папок. Например, для тестирования функций управления пользователями у меня есть: /test/e2/features/user/xyz.feature и /test/e2/features/user/step-definitions/step-defs.js. В этом подходе мне нужно было бы поместить hook.js в пошаговые определения каждой функции, что на самом деле не имеет смысла. Я мог бы попробовать использовать параметр --require, однако я не уверен, как это будет работать с gulp. - person Jakub; 04.07.2015
comment
Почему бы не иметь папку верхнего уровня, такую ​​как /test/e2/features/step-definitions, и папку пользователей под ней и не поместить hooks.js на уровень step-definitions. Или в вашей текущей настройке вы можете попробовать поместить hooks.js в папку функций. Это тоже должно работать. Дайте нам знать, что работает, а что нет - person nilesh; 04.07.2015
comment
Первый подход на самом деле не работает, так как я хотел бы хранить файлы функций и определения шагов вместе в одной папке, поэтому вместе /test/e2/features/user/xyz.feature и /test/e2/features/user/step -definitions/шаг-defs.js. Ваши идеи заставляют меня поместить мой файл функций в папку /test/e2/features/step-definitions/user, если я правильно вас понял. Я также пытался поместить hooks.js в папку fetures, но это не помогло. - person Jakub; 14.07.2015
comment
Поскольку определения шагов являются глобальными для всех тестов, не имеет смысла группировать их в папках функций. Книга о огурцах, изданная Pragmatic Press, — отличная книга для понимания того, как использовать огурец (даже если ее примеры написаны на Ruby — но огурец изначально был написан для сообщества Ruby). В любом случае, рекомендуемая структура папок — это папка features, которая содержит все ваши файлы *.feature, и которая содержит папку step_definitions, содержащую все определения шагов, и папку support в папке features, содержащую World и любые хуки. - person fourpastmidnight; 27.11.2015
comment
Кроме того, обратите внимание, что, поместив код step_definitions и support в папку features, вам не нужно будет использовать флаг --require, поскольку огурец будет автоматически искать определения шагов и рекурсивно поддерживать код в папках ниже, где находятся файлы *.feature. - person fourpastmidnight; 27.11.2015

Получив файл hooks.js, перейдите к файлу cucumberOpts внутри файла protractor.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'
  }

Вы также можете включить console.log('Was my hook load') в свой файл hooks.js и найдите этот текст журнала позже, чтобы убедиться, что ваш хук был правильно загружен.

person pelican    schedule 12.09.2016