Cypress.io + TypeScript. Вызов утверждения в начале теста

Я новичок в Cypress.io и TypeScript. Так что я кое-чего здесь не понял.

Мой код:

//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)
   }) 
})

Допустим, _numberBefore после // Некоторый code2 был изменен и стал _numberAfter. Я хочу заявить, что число уменьшилось на 1.

После запуска теста в Cypress.io я получаю сообщение об ошибке:

expected NaN to equal NaN

и это не удается.

Вопрос:

Почему мое утверждение не вызывается после выполнения всего кода? Почему он был вызван в начале теста?

Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
2
0
816
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Cypress асинхронно ставит в очередь все ваши команды сразу. Это значит, что

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

не будет работать. cy.get() просто говорит Cypress добавить команду get() в список команд, которые в конечном итоге будут выполнены. Он не запускает команду сразу.

.then() предоставляет хорошую альтернативу - вы можете использовать его для постановки в очередь некоторого Javascript, который будет запускаться при запуске команды, например:

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

    // You can put regular javascript code here:
    console.info("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);
    });
});

Обратите внимание, что .should(() => {}) действует как .then(), за исключением того, что он будет повторять попытку, если какие-либо содержащиеся утверждения не удаются.

См. здесь для получения дополнительной информации о сравнении значений двух элементов друг с другом и см. эта страница документа для получения дополнительной информации об общих концепциях асинхронной организации очереди команд в Cypress.

Все в порядке, только например код должен быть таким: cy.get('#idOfItem').then(($numberBefore) =>{ const txt = $numberBefore.text() var _numberBefore = +txt //Some code 1 cy.get('#idOfItem').should(($numberAfter) => { const txt2 = $numberAfter.text() var _numberAfter = +txt2 expect(_numberBefore-1).to.equal(_numberAfter) }) }) Переменная должна быть в скобках "()". P.s. Спасибо за помощь.

Vilius 09.08.2018 09:42

Если вы говорите об анонимном функциональном стиле () => {}, то someVar => {} действительно действителен. Скобки нужны, если аргументов нет или есть более одного аргумента, но если аргумент только один, вы можете опустить (). См. Рабочий пример эта рабочий пример.

Joshua Wade 09.08.2018 15:31

Другие вопросы по теме