我正在应用程序中使用Cypress进行e2e测试 我想测试的这一特定行为是:

  1. 在表单中输入信息.
  2. 按提交.
  3. 将创建新字段并将其放置在表的底部.
  4. 选中具有我在上一个表单中输入的值的最后一个字段.

一切正常,但在测试时,我得到的不是最后一个值,而是前一个值,就像没有完成创建一样.

cy.get("button").contains("Submit").click();
    cy.url().should("include", "/advertisers");

    cy.get("tr").last().should("contain.text", "New Advertiser");
    cy.get("tr").last().should("contain.text", "Lom Yolk");
    cy.get("tr").last().should("contain.text", "500");
    cy.get("tr").last().should("contain.text", "Prepaid");

弹出的错误是关于它应该将数据与最后一行匹配,但它检测到的是来自上面行的信息

是我的网速,还是我应该在某个地方放一个.然后不知何故?

先谢谢你

推荐答案

我猜Submit发出的是一个依赖于某个服务器的异步请求.

当您使用cy.get("tr").last()时,它将立即执行,因为如果页面上已经有最后tr个元素,并且在VUE更新DOM之前在该元素上执行.

你可以在继续之前判断长度(随机挑选7个)

// this should wait until the 7th row is added
cy.get("tr").should("have.length", 7);

// then these can assume the DOM was already updated
cy.get("tr").last().should("contain.text", "New Advertiser");
cy.get("tr").last().should("contain.text", "Lom Yolk");
cy.get("tr").last().should("contain.text", "500");
cy.get("tr").last().should("contain.text", "Prepaid");

稍微简单一点的 Select 是使用cy.get(tr:last),因为是using only the 101 with a selector will re-test for DOM changes,而不是using 102 doesn't.

cy.get("tr:last").should("contain.text", "New Advertiser");
cy.get("tr:last").should("contain.text", "Lom Yolk");
cy.get("tr:last").should("contain.text", "500");
cy.get("tr:last").should("contain.text", "Prepaid");

不过,我的建议是也包括wait

// create the alias
cy.intercept('/my-api-call/*').as('myApiCall')

//...
cy.get("button").contains("Submit").click();

// wait for the alias to have been called
cy.wait('@myApiCall')

// then make the other assertions but assume still that the DOM may not have updated yet

包括API等待(尤其是嘲笑它)可以帮助减少测试缺陷.如果您使用数字等待时间或完全跳过它们,如果您依赖外部API,您可能会随机中断.

Vue.js相关问答推荐

为什么在Vue.js中修改非react 性似乎是react 性的?

Vue 3使用计算(computed)属性对象获取图像信息,在模板中呈现值时变为NaN

点击屏幕的任何位置都会禁用v-overlay

为什么 Vue 在将设置脚本中的计算(computed)属性渲染到模板时找不到变量

如果似乎没有明确使用输入事件,那么发出输入事件有什么作用?

vue3 ssr 不返回纯 html

将媒体源/流绑定到视频元素 - Vue 3 组合 API

VeeValidate 4 字段验证状态

查找未销毁的 Vue 组件

Axios Intercept 在第一次调用时未从 localStorage 应用令牌

vuejs:将props传递给javascript中的组件?

VueJs this.method 不是函数?如何在 Vuejs 的另一个方法中调用一个方法?

在 vue 组件中检索配置和环境变量

在 Vuejs 中Watch观察 window.scrollY 的变化

如何在某些异步数据(在 Vuex 存储中)加载之前防止任何路由?

将自定义部分添加到 v-autocomplete 下拉列表

如何从 vue.js 中的自定义组件中冒泡点击事件?

如何在 vuetify 中将工具提示添加到数据表标题?

Vue CLI 3 sass-resources-loader - Options.loaders 未定义

Vue $refs 对象的类型为 unknown未知