крючок beforeEach неправильно изменяет контекст - PullRequest
0 голосов
/ 31 октября 2018

У меня есть некоторые определения шагов, которые нужно поместить относительно других, поэтому я использую контекст, чтобы предупредить автора теста, если он не пишет тест правильно.

огурец

Scenario: doesn't need fixture
  Given I am "admin"
  And I am logged in

Scenario: uses fixture
  Given I am "admin"
  And I use the fixture "foo.json"
  And I am logged in

JS

beforeEach(function () {
  this.isLoggedIn = false;
  cy.fixture('fixtures.json').as('fixtures');
});

given('I am {string}', function(username) {
  this.username = username;
});

given('I am logged in', function () {
  cy.request('/auth/login');
  this.isLoggedIn = true;
  // etc...
});

given('I use the fixture {string}', function(fixtureName) {
  if (this.isLoggedIn) throw new Error('You should declare fixtures before logging in');

  this.data = this.fixtures[fixtureName];
});

Если я выполняю некоторую консольную регистрацию в хуке beforeEach, я вижу, что this.isLoggedIn устанавливается на false перед каждым тестом. Однако, если я запишу то же самое в своем определении шага, контекст, похоже, не изменится.

as является асинхронным , поэтому я подумал, что, может быть, это было какое-то состояние гонки, не позволяющее установить контекст, но пытавшееся дождаться, пока cy.fixture завершит работу в ловушке, подобной этой

beforeEach(function() {
  return Promise.all([
    cy.fixture('fixtures'),
    cy.fixture('users')
  ]).then((fixtures, users) => {
    this.fixtures = fixtures;
    this.users = users;
    this.isLoggedIn = false;
  })
});

тогда кипарис просто говорит мне, что я не могу использовать обещание в крючке ...

Как правильно сбросить контекст в хуках?

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