Я новичок в 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
и это не удается.
Вопрос:
Почему мое утверждение не вызывается после выполнения всего кода? Почему он был вызван в начале теста?
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.
Если вы говорите об анонимном функциональном стиле () => {}
, то someVar => {}
действительно действителен. Скобки нужны, если аргументов нет или есть более одного аргумента, но если аргумент только один, вы можете опустить ()
. См. Рабочий пример эта рабочий пример.
Все в порядке, только например код должен быть таким:
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. Спасибо за помощь.