如何在Ensure断言失败时执行二次断言?(用户邮箱校验场景)
实现断言失败后的二次校验逻辑(邮箱未占用校验场景)
问题背景
在用户列表页面添加新用户时,需要验证输入的邮箱未被占用。原本的校验逻辑是检查"邮箱已占用"的提示弹窗不存在:
checkMailIsNotUsed: () => Task.where('#actor checks mail present message is absent', Ensure.that(UsersList.messageArea, not(isVisible()))),
但实际场景中存在例外:提示区域可能显示其他无关错误(比如格式错误),此时虽然提示可见,但邮箱并未被占用。需要实现"第一个断言失败时,再执行第二个断言"的逻辑——即提示区域可见时,检查文本里不包含already exists,而不是直接终止流程。
解决办法
用try-catch包裹第一个断言,捕获断言失败的异常后执行二次校验,代码示例如下:
checkMailIsNotUsed: () => Task.where('#actor checks mail is not used', () => { try { // 优先校验:提示区域不可见(无任何提示) Ensure.that(UsersList.messageArea, not(isVisible())); } catch () { // 第一个断言失败时,校验提示文本不是邮箱已占用的错误 Ensure.that(Text.of(UsersList.messageArea), not(includes('already exists'))); } }),
逻辑解释
- 正常流程:如果提示区域不可见,直接通过校验,确认邮箱未被占用。
- 异常分支:如果提示区域可见(第一个断言失败),则检查提示内容是否不包含
already exists——如果包含则抛出错误(说明邮箱确实已占用),如果不包含则校验通过(说明是其他无关提示,邮箱可用)。
这样就覆盖了所有合法场景,不会因为无关提示误判邮箱状态。
内容的提问来源于stack exchange,提问作者Dapangma
相关产品推荐
相关产品推荐

