Basicamente em nosso sistema interno temos uma página de pedido que alguém preenche e depois clica em salvar para 'publicá-lo' no banco de dados. A página publicada é então exibida e o POST de visualização de página é enviado.
Tentei seguir os exemplos da seguinte maneira ->
cy.intercept('POST', '/api/order/').as('orderPublished');
cy.intercept('POST', '/api/user/pageview', cy.spy().as('postSpy');
cy.wait('@orderPublished').then((capture) => {
cy.log('pageViewPostCount --> ', cy.get('@postSpy').its('callCount'));
});
No entanto, em vez de obter uma contagem, estou obtendo um objeto de janela no log ->
Estou tentando descobrir 2 coisas:
- Estou criando o espião corretamente para o objeto Interception retornado?
- Como caminho para o valor da contagem de chamadas do alias?
Examinei a documentação do Cypress e ela mostra como 'espionar' um objeto que é facilmente criado ou um método que é facilmente referenciado, mas não vejo exemplos de como fazer o que estou tentando. Já vi um ou dois artigos referenciando que @ não funciona para cy.get, mas em outros artigos as pessoas dizem que funciona. Obviamente, pelo log, estou recebendo algo, aparece o objeto da janela, então não tenho certeza de como proceder.
Excluí várias linhas de código, mas o tradicional cy.intercept().as(aliasName) juntamente com cy.wait(aliasName) não funciona para isso.
É bastante complicado obter a contagem de chamadas de um espião que registra algo que acontece de forma assíncrona (como esperar por uma interceptação de rede).
O comando
cy.get('@postSpy')
fornece um instantâneo do espião naquele momento , mas não espera que todas as chamadas sejam feitas.Pelo que você descreve,
orderPublished
ocorre primeiro entãopageview
. Então você precisa esperarpageview
também.Usar
cy.intercept(...).as('some-alias')
é na verdade um espião, então você pode descartar ocy.spy()
código completamente.Então, para começar, faça isso
Agora, a questão é: o que você quer fazer
callCount
?Se o seu teste for
como você verifica se uma segunda chamada nunca aconteceu?
Na IMO, o melhor é permitir que o teste falhe e afirmar que ele falha.
adicione um
done
parâmetro ao testeadicione um
cy.on('fail')
manipulador para capturar a falha do testeadicione um segundo
cy.wait('@pageview')
que causará a falhaO que há de errado com cy.log()
O problema na
cy.log()
declaração é que todoscy.get()
retornam o objeto que você vê na captura de tela, não ocallCount
número bruto desejado.Você pode corrigir isso usando
.then()
, embora, como já mencionado, isso não ajude no seu teste.