У меня есть пользовательская команда кипариса, которая выполняет некоторые асинхронные задачи, и на основе результата команды я хочу выполнить некоторые утверждения.
Но проблема в том, что тесты, которые приходят после вызова команды, либо будут запущены до завершения команды, либо будут иметь неверные значения.
Ниже мой код
Команда
Cypress.Commands.add("testCommand", () => {
cy.request("http://localhost:3000/testApi").then(({ body }) => {
cy.request(`http://localhost:3000/testApi${body.query}`).then(() => {
console.log("success");
});
});
});
тест
describe("Summary Page", () => {
it("my demo test", () => {
console.log("before command runs");
cy.testCommand();
console.log("after command runs");
});
});
<сильный> фактический результат сильный>
before command runs
after command runs
success
Обязательный результат
before command runs
success
after command runs
Как вы можете видеть, вывод after command runs
будет запущен до завершения команды
Есть ли способ дождаться завершения команды, прежде чем переходить к тестам?
2 ответа
Это связано с тем, что команды, отличные от Cypress, выполняются асинхронно, что означает, что они не обязательно будут запускать команды в той последовательности, в которой они написаны. Чтобы решить эту проблему, вы можете использовать then()
, что-то вроде:
describe('Summary Page', () => {
it('my demo test', () => {
console.log('before command runs')
cy.testCommand().then(() => {
console.log('after command runs')
})
})
})
Если console.log()
не нужен, вы можете заменить его на cy.log()
a>, который будет записываться в средство запуска тестов. Таким образом, вы можете заменить в точных местах, не изменяя слишком много вашего кода.
Команда
Cypress.Commands.add("testCommand", () => {
cy.request("http://localhost:3000/testApi").then(({ body }) => {
cy.request(`http://localhost:3000/testApi${body.query}`).then(() => {
// you may want to add some assertion here, maybe expected status code
cy.log("success");
});
});
});
тест
describe("Summary Page", () => {
it("my demo test", () => {
cy.log("before command runs");
cy.testCommand();
cy.log("after command runs");
});
});
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.