У меня есть некоторые определения шагов, которые нужно поместить относительно других, поэтому я использую контекст, чтобы предупредить автора теста, если он не пишет тест правильно.
огурец
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;
})
});
тогда кипарис просто говорит мне, что я не могу использовать обещание в крючке ...
Как правильно сбросить контекст в хуках?