Ошибка ловушки AfterAll - это не относится к моему конструктору мира при использовании cucumber-js и selenium - PullRequest
0 голосов
/ 16 октября 2018

Я получаю сообщение об ошибке AfterAll с ошибкой при попытке закрыть браузер в конце моих тестов (используя cucumber-js и selenium).«this» не относится к миру, как это происходит в моих файлах step.js

Это мой файл hooks.js:

const { AfterAll, Before } = require("cucumber");

AfterAll(async function() {
  await this.browser.close();
});

, а это мой файл world.js:

const driver = require("selenium-webdriver");
require("chromedriver");
const browser = new driver.Builder().forBrowser("chrome").build();
const { setWorldConstructor, setDefaultTimeout } = require("cucumber");

class CustomWorld {
  constructor() {
    this.driver = driver;
    this.browser = browser;
    this.setDefaultTimeout = setDefaultTimeout(60 * 1000);
  }
}

setWorldConstructor(CustomWorld);

Ответы [ 2 ]

0 голосов
/ 30 августа 2019

По документам CucumberJS :

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

К сожалению, я тоже столкнулся с этим.До сих пор мой обходной путь состоял в том, чтобы объявить переменную в области видимости, доступной для хуков beforeAll и afterAll, а затем импортировать и назначить ее объекту мира в его файле.

0 голосов
/ 17 октября 2018

В JS замыкании this неявно устанавливается любой внешний контекст (обычно глобальный).Вам нужно либо .bind() свою функцию this, либо использовать запись толстого массива:

AfterAll(async () => {
  await this.browser.close();
});
...