#cypress
Вопрос:
Может ли перегрузка пользовательской команды выполняться так же, как перегрузка функции? В документации нет ответа на этот вопрос.
Например:
Cypress.Commands.add('navigateAndWaitForApi',
(relativePath: string, apisPath: string[], timeout?: number) => {
let options = {};
if (timeout !== undefined) {
options = { timeout: TIMEOUT };
}
apisPath.forEach((api)=> {
cy.intercept(`/api/${api}`).as(api);
})
cy.visit(`/${relativePath}`);
cy.wait(apisPath.map(apiPath => `@${apiPath}`), options);
});
Cypress.Commands.add('navigateAndWaitForApi',
(relativePath: string, apiPath: string, timeout?: number) => {
cy.navigateAndWaitForApi(relativePath, [apiPath], timeout);
});
Ответ №1:
По — видимому, это не так. Имя команды navigateAndWaitForApi
-это общая подпись.
Добавьте это после определений команд
console.log(Cypress.Commands._commands)
показывает, что команды хранятся в объекте с ключом по имени команды.
При добавлении одной и той же команды дважды вторая перезаписывает первую.
Можно ввести-проверить параметры во время выполнения.
Cypress.Commands.add('navigateAndWaitForApi',
(relativePath: string, apiPaths: string|string[], timeout?: number) => {
if (typeof apiPaths === 'string') {
apiPaths = [apiPaths]
}
let options = {};
if (timeout !== undefined) {
options = { timeout: TIMEOUT };
}
apiPaths.forEach((api)=> {
cy.intercept(`/api/${api}`).as(api);
})
cy.visit(`/${relativePath}`);
// cy.wait(apiPaths.map(apiPath => `@${apiPath}`), options); // look dubious
apiPaths.forEach(apiPath => {
cy.wait(`@${apiPath}`), options)
})
});