Actualicé mi cypress a la versión 9.7.0 y ahora mismo tengo un problema con deep equal . Cuando escribí la línea de prueba de código:
expect([1,2,3]).to.deep.equal([1,2,3]);
Todo funciona correctamente.
Mientras estoy probando la tienda redux, recibí un error que se ve
Se agotó el tiempo de reintento después de 4000 ms: se esperaba que [Array(2)] fuera profundamente igual a [Array(2)]
Las matrices en la vista previa de la consola de devtool son las mismas... Lo he intentado de dos maneras para escribir la prueba. También lo combiné con asíncrono y tiempos de espera.
Primer intento:
it('Example redux check', () => { cy.fixture('file.json').then((fixtures) => { cy.window() .its('store') .invoke('getState') .its('queue.queueItems').should('deep.equal', fixtures.store.queue.queueItems); }); });
Segundo intento
it('Example redux check', () => { cy.fixture('file.json').then((fixtures) => { const getQueueItems = (win) => { return win.store.getState().queue.queueItems; } cy.window() .pipe(getQueueItems) .should('deep.equal', fixtures.store.queue.queueItems); }); });
¿Alguien tuvo un problema similar o idea de cómo evitar ese tiempo de espera? Sucede exactamente lo mismo al comparar cargas útiles asíncronas...
No me puedo quejar de la afirmación deep.equal
en Cypress v9.7.0, incluso de matrices y objetos profundamente anidados, excepto cuando el orden difiere.
Si su problema es la diferencia en el orden de la matriz, intente agregar el paquete deepEqualInAnyOrder
const deepEqualInAnyOrder = require('deep-equal-in-any-order'); chai.use(deepEqualInAnyOrder); it('matches when ordering is different', () => { const expected = [{a:{x:1}}, {b:2},{c:3}]; expect([{a:{x:1}}, {b:2}, {c:3}]).to.deep.equal(expected) // passes expect([{b:2}, {a:{x:1}}, {c:3}]).to.deep.equal(expected) // fails expect([{b:2}, {a:{x:1}}, {c:3}]).to.deep.equalInAnyOrder(expected) // passes });
También quería ver si deep.equal
en el elemento <h1>
de http://example.com
tendría éxito.
Aquí está mi ejemplo mínimo y reproducible.
// Cypress 9.7.0 it('passes deep-equal of two DOM objects', () => { cy.visit('http://example.com') cy.get('h1').then($el1 => { // get h1 1st time cy.get('h1').then($el2 => { // get another copy // Are they different objects? expect($el1).to.not.equal($el2) // pass expect($el1 === $el2).to.equal(false) // pass // Do they deep-equal expect($el1).to.deep.equal($el2) // pass }) }) })
Casi todas las interfaces que uso tienen Cypress, incluidas algunas de código abierto.
Está relacionado con algunos problemas abiertos en GitHub y afecta a las últimas versiones de Cypress.
https://github.com/cypress-io/cypress/issues/21353
https://github.com/cypress-io/cypress/issues/21469
Esto es lo que obtengo en un WIP después de actualizar algunas pruebas que usan deep.equal
:
Su primer ejemplo parece más estándar.
Recomiendo bajar a una versión inferior. La siguiente versión funcionó para mí antes de la actualización:
9.5.4