判断 await 是否需要添加到 expect 前

expect 第一个参数建议两种用法,第一种是传递 locator ,第二种是传递基础数据类型值

除了前面两个用法还可以传递( PageAPIResponse ),但是暂时用不上,建议先优先以前两种用法为主

awaitexpect 中的使用

第一种,传递了 locator 的情况

此时 expect 返回的对象会附加 playwright 的拓展方法 ExtraLocatorMatchers ,可以使用 Assertions上的拓展方法,并且返回的是 Promise 对象,故需要在前加上 await 来配合使用

// 此处 toBeVisible 返回的是 Promise 需配合 await 使用
public async assertLoginFail () {
    await expect(this.page.locator('.error-msg'), '账号或密码输入错误,对应错误提示没有被正常展示').toBeVisible();
}

第二种,传递了 基础数值 的情况

此时 expect 返回的对象基本含有 jest 的方法,不含 playwright 拓展的方法,并且返回的基本都是 void ,所以一般不需要在前加上 await 来使用

// 从响应正文的 JSON 中获取 code
const { code } = await Response.json();
// 此处 toBe 无返回值,所以不需要加 await 使用
expect(code, '告警详情数据请求失败').toBe(0);

注意

在值断言中,expect第一个参数可以接受Promise与非 Promise对象的数值,对于传递的Promise对象,会自动等待其状态变换后的结果进行判断,但是为了避免 Promise 等待状态变换的过程中,expect等待超时,导致结果误判,进而影响测试结果,所以建议统一将 Promise 提出,在外等待其结果返回后再进行断言

// expect 对于数值的判断(错误的做法)
expect(customerCountLocator.innerText(), '客户数不能为0').not.toBe('0');

// 正确的做法
const customerCountInnerText = await customerCountLocator.innerText();
expect(customerCountInnerText, '客户数不能为0').not.toBe('0');
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐