typescript - 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
它失败了。
问题:
为什么在执行所有代码后我的断言没有调用?为什么在测试开始时调用它?
解决方案
赛普拉斯一次将您的所有命令异步排队。这意味着
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()
,但如果任何包含的断言失败,它将重试。
有关将两个元素的值相互比较的更多信息,请参见此处,有关赛普拉斯中异步命令队列的一般概念的更多信息,请参见此文档页面。
推荐阅读
- android - 如何存储android volley请求的数据以对响应中的数据进行一些处理?
- python - 双管道运算符和 python virtualenv 的奇怪行为
- keycloak - 通过电子邮件邀请用户并设置他们的密码
- android - 重新选择选项卡时更新 ViewPager 中的片段
- javascript - 为什么javascript内联对象创建一个新的添加键不起作用?
- c# - 关闭表单后基于服务的数据库未保存
- xcode - 如何在基于文档的 Mac 应用程序中为我的文档添加自定义文档图标?
- ng-bootstrap - 如何在入门演示完整示例(搜索、排序、页面和过滤器)中调用实际服务而不是本地 JSON
- javascript - 前端使用两个不同的域(内部域和外部域)与后端通信
- r - 如何使用正则表达式识别 icd10 数据中的模式