Cypress.io + TypeScript. Apel de aserțiune la începutul testului


Sunt nou în Cypress.io și TypeScript. Așa că nu am înțeles câteva lucruri aici.

Codul meu:

//Test
describe('TEST description', function () {
it('newJobCreation', function () {
    //Some code 1
    var numberBefore = cy.get('#idOfItem')
    var _numberBefore = +numberBefore
    //Some code 2

    var numberAfter = cy.get('#idOfItem')
    var _numberAfter = +numberAfter
    //Assertion
    expect(_numberBefore-1).equals(_numberAfter) //Same result if I use: assert.equal(_numberBefore-1, _numberAfter)
   }) 
})

Să spunem că _numberBefore după //Some code2 a fost schimbat și a devenit _numberAfter. Vreau să afirm că numărul a scăzut cu 1.

După ce am rulat testul în Cypress.io, primesc mesajul de eroare:

se aștepta ca NaN să fie egal cu NaN

și eșuează.

Întrebare:

De ce afirmația mea nu este apelată după ce tot codul a fost executat? De ce a fost apelată la începutul testului?

Răspuns #1

Cypress pune în coadă comenzile tale asincron, toate odată. Aceasta înseamnă că

let elem = cy.get("#elem");
// attempt to do something with returned element...

nu va funcționa. cy.get() spune doar Cypress să adauge comanda get() la lista de comenzi care vor fi executate în cele din urmă. Nu execută comanda imediat.

.then() oferă o alternativă plăcută - o poți folosi pentru a pune în coadă ceva cod Javascript care să fie rulat când comanda este executată, astfel:

cy.get("#elem1").then(elem1 => {
    // elem1 is the underlying DOM object.

    // You can put regular javascript code here:
    console.log("This will happen when the queued .then() command is run");

    // You can also put more Cypress commands here, like so:
    cy.get("#elem2").should(elem2 => {
        expect(elem1.someProperty).to.equal(elem2.someProperty);
    });
});

Rețineți că .should(() => {}) funcționează ca un .then(), cu excepția faptului că va încerca din nou dacă oricare dintre afirmațiile conținute eșuează.

Consultați aici pentru mai multe informații despre compararea valorilor a două elemente între ele și vedeți această pagină de documentație pentru mai multe informații despre conceptele generale ale cozii de comenzi asincrone în Cypress.