Перегрузка пользовательской команды в Cypress

#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)
    })

});