Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

cy.login não é uma função

Durante a aula onde é introduzido o uso de comandos customizáveis, ao implementar como está na aula e chamar a função cy.login(), o Cypress aponta que login não é uma função.

Segue como está o meu arquivo commands.js:

Cypress.Commands.add('login', (nome, senha) => { 
    cy.get('[data-test="loginUserName"]').type(nome);
    cy.get('[data-test="loginPassword"]').type(senha);
    cy.get('[data-test="loginBtn"]').click();
 })

login.cy.js:

describe('Página de Login', () =>{

beforeEach(() => {
    cy.visit('https://3076-cypress-alurapic-front.vercel.app/#/home')
})

    it('Verificar mensagem de campos obrigatórios',  () => {
        //cy.visit('https://3076-cypress-alurapic-front.vercel.app/#/home')
        cy.contains('User name is required!').should('be.visible');
        cy.contains('Password is required!').should('be.visible')
    });
    it('Deve preencher os campos do formulário corretamente e realizar login', () => {
        cy.login('carowl', '12345678');
        cy.contains('(Logout)').should('be.visible');
    })
})

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Olá, David! Tudo bem?

Pelo que você descreveu, parece que o seu código está correto. A função cy.login() foi definida corretamente no arquivo login.cy.js.

No entanto, o erro "cy.login não é uma função" geralmente ocorre quando o Cypress não consegue encontrar a definição da função que você está tentando usar.

Como não vi nenhum problema nos trechos de código que você compartilhou, o seu problema deve está no arquivo "e2e.js", onde no mesmo deve conter o seguinte trecho de código para que essa nova função que você criou funcione corretamente. OBS: o arquivo "e2e.js" deve está na mesma pasta que o "commands.js"

import './commands'

Espero ter ajudado e caso tenha mais problemas ou dúvidas, estarei à disposição.

Grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Confirmei aqui e o arquivo e2e.js está com a linha que mencionou assim. Estou utilizando a versão 12.17.4 do Cypress, será que pode ser algo referente a versão?

solução!

Consegui achar essa issue no github [https://github.com/cypress-io/cypress/issues/27641], que fala do problema que estou tendo.

Aparentemente foi uma mudança que fizeram no Cypress 12.17.4 e consegui contornar criando e exportando a função nos arquivos commands.ts e importando e chamando no arquivo e2e.ts.

commands.ts:

export function login(){
Cypress.Commands.add('login', (nome, senha) => { 
    cy.get('[data-test="loginUserName"]').type(nome);
    cy.get('[data-test="loginPassword"]').type(senha);
    cy.get('[data-test="loginBtn"]').click();
 })
}

e2e.ts:

import './commands'
import { login } from './commands'
login();