首页 > 解决方案 > 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 after //一些code2被改变并变成_numberAfter。我想断言这个数字减少了 1。

在 Cypress.io 中运行测试后,我收到错误消息:

预期 NaN 等于 NaN

它失败了。

问题:

为什么在执行所有代码后我的断言没有调用?为什么在测试开始时调用它?

标签: typescriptassertionbrowser-automationcypress

解决方案


赛普拉斯一次将您的所有命令异步排队。这意味着

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

不管用。cy.get()只是告诉赛普拉斯将命令添加get()到最终要运行的命令列表中。它不会立即运行命令。

.then()提供了一个不错的选择 - 您可以使用它来排队一些 Javascript,以便在命令运行时运行,如下所示:

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

请注意,它.should(() => {})的行为类似于 a .then(),但如果任何包含的断言失败,它将重试。

有关将两个元素的值相互比较的更多信息,请参见此处,有关赛普拉斯中异步命令队列的一般概念的更多信息,请参见此文档页面


推荐阅读