4
respostas

[Dúvida] Aninhar it

Estou começando, para executar um segundo teste (it) de onde o anterior parou, removi Each da instrução beforeEach, e funcionou como o esperado, porém, qual seria a melhor forma para realizar isto?

describe('alura busca curso', () => {
    before(() => {
        cy.visit('https://www.alura.com.br');
    })

    it('buscar curso de java', () => {
        cy.get('#header-barraBusca-form-campoBusca').type('java');
        cy.get('.header-barraBusca-form-submit').click();
        cy.get('h4.busca-resultado-nome').should('contain', 'Formação Java e Orientação a Objetos');
    })

    it('buscar curso de python', () => {
        cy.get('[id="busca-form-input"]').clear().type('python{enter}', { force: true });
        cy.get('[class="busca-resultado-nome"]').should('contain', 'Formação Python  e orientação a objetos');
    })
})
4 respostas

Olá, boa noite Rogério, tudo bem?

Dei uma analisada no seu código e tentei replicar aqui. Já notei que ele funcionava normal com "beforeEach()" e que o problema estaria no segundo caso de teste "it.()", no seu código está assim cy.get('[id="busca-form-input"]') porém o correto é cy.get('[id="header-barraBusca-form-campoBusca"]'). Tempo que demorou para rodar os testes: √ buscar curso de java (9556ms) √ buscar curso de python (6498ms)

Código utilizado:

describe("alura busca curso", () => {
    beforeEach(() => {
        cy.visit("https://www.alura.com.br");
    });

    it("buscar curso de java", () => {
        cy.get("#header-barraBusca-form-campoBusca").type("java");
        cy.get(".header-barraBusca-form-submit").click();
        cy.get("h4.busca-resultado-nome").should(
            "contain",
            "Formação Java e Orientação a Objetos"
        );
    });

    it("buscar curso de python", () => {
        cy.get('[id="header-barraBusca-form-campoBusca"]')
            .clear()
            .type("python{enter}", { force: true });
        cy.get('[class="busca-resultado-nome"]').should(
            "contain",
            "Formação Python  e orientação a objetos"
        );
    });
});

Caso tiver alguma dúvida, só responder que verificarei, se caso consegui lhe auxiliar, poderia marcar essa resposta como a solução? :)

Boa tarde Diogo, No código que descreví, o segundo "it" continua de onde o primeiro parou, sem atualizar a página principal, por isso utilizeia apenas before sem o Each, a pergunta é se isto está correto ou se há alguma outra forma de fazê-lo? Neste caso, o ID do campo é alterado em conjunto com a página.

Boa tarde Rogério!

O before ele performa antes do primeiro "it". O beforeEach ele performa antes de todos os "it".

Seguindo essa lógica, o teste só ocorre no primeiro "it", no segundo irá dar um erro, sinalizando que não tem como buscar o ID porque não tem o que carregar... (página vazia)

Erro informado do seu teste, que não consegue carregar o segundo "it" com o uso do before. Mesmo teste utilizado pelo Rogério

Se o seu cypress está agindo de maneira diferente da que eu citei (pelo o que está comentando o seu cypress não está agindo da maneira convencional) , indicaria criar um novo projeto em uma nova pasta e tentar instalar ele do zero, para validar se não é algo no seu cypress.

Boa tarde, Diogo. Está funcionando normalmente, o segundo "it" continua de onde o anterior parou, este é o comportamento que eu esperava. A questão é se havia outra forma de fazer ou se esta é a correta. Insira aqui a descrição dessa imagem para ajudar na acessibilidade