Предотвратить сброс мира между каждым сценарием - PullRequest
0 голосов
/ 30 января 2020

Я работаю с Cucumber- js и Typescript.

Я хотел бы создать и инициализировать драйвер для моих тестов. Я хочу, чтобы этот драйвер был инициализирован в асинхронной области c, чтобы ни один тест не начинался до того, как он был настроен (что может занять до 10 секунд), и после его инициализации мне не придется делать это снова для каждый сценарий. Я пытался сохранить драйвер в пользовательском классе World и инициализировать его только один раз в функции BeforeAll, но у меня нет доступа к this в этой функции:

class Context implements World {
  public driver: Driver

  public constructor() {
    this.driver = new Driver()
  }

  public async init_driver() {
    await this.driver.init()
  }
}

и

BeforeAll( async function() {
  setWorldConstructor(Context)

  await this.init_driver() // error TS2683: 'this' implicitly has type 'any' because it does not have a type annotation
})

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

1 Ответ

0 голосов
/ 12 февраля 2020

Первое утверждение на этой странице 'https://github.com/cucumber/cucumber-js/blob/master/docs/support_files/world.md' говорит, что это будет доступно в ловушках и самих мировых файлах, и его область действия ограничена только этими двумя файлами.

Повторное использование запущено объект драйвера:

1) Создайте отдельный класс (например, ReUse) с переменной stati c, называемой «драйвер». 2) Создайте класс с именем hooks и импортируйте его выше созданного класса. 3) Используя функцию Before () в файле hooks, мы можем обработать это следующим образом:

if (typeof ReUse.driver === 'undefined' ) {- код запуска браузера и присвоение этого объекта той же переменной ReUse.driver. }

Таким образом, при первом запуске сценария ReUse.driver будет удерживать неопределенное значение и будет go внутри блока if. Там мы запускаем объект драйвера и присваиваем его переменной ReUse.driver. При запуске второго сценария этот ReUse.driver будет содержать объект драйвера, и условие не будет выполнено. Следовательно, драйвер больше не будет запущен ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...