Что у меня есть
У меня есть команда, которая может запросить токен, и он разрешает обещание при ответе. Как только обещание разрешается, я помещаю токен в sessionStorage в SomeTest. js. Это работает. Но я должен поставить точно такой же cy.window()...
в каждом тесте.
SomeTest. js:
before(()=>{
cy.login().then(res=>
cy.window().then((window) => {
window.sessionStorage.setItem('token', JJSON.stringify(res))
})
);
});
команда в командах. js
Cypress.Commands.add('login', function () {
fetcher.emit('tokenRequest',{email:'dummy@mail.com', password:'dummy'});
return new Cypress.Promise((resolve, reject) => {
fetcher.on('onTokenResponse',function(response) {
resolve(response);
});
});
});
Что я хочу
Я бы хотел установить sessionStorage в команде login()
.
SomeTest. js:
before(()=>{
cy.login();
});
команда в командах. js
Cypress.Commands.add('login', function () {
fetcher.emit('tokenRequest',{email:'dummy@mail.com', password:'dummy'});
return new Cypress.Promise((resolve, reject) => {
fetcher.on('onTokenResponse',function(response) {
cy.window().then((window) => {
window.sessionStorage.setItem('token', JSON.stringify(response));
resolve(response);
})
});
});
});
Но выдает ошибку : Uncaught CypressError: Cypress detected that you returned a promise from a command while also invoking one or more cy commands in that promise.
, The cy command you invoked inside the promise was:> cy.window()
.
Я понимаю, что проблема в том, что я пытаюсь вызвать другое обещание, которое не возвращается. Но как мне добиться чего-то подобного?
Мне нужно
- emit
tokenRequest
- ждать получения
tokenResponse
cy.window()
и установите элемент sessionStorage
Редактировать:
Я нашел обходной путь и заключил логин в другую функцию / команду, которая, кажется, работает, но Я не уверен, насколько красиво это решение.
Cypress.Commands.add('loginFull', function () {
return cy.login().then((response)=>{
cy.window().then((window) => {
window.sessionStorage.setItem('token', JSON.stringify(response));
});
});
});