【问题标题】:Soft assert or something similar in Cypress赛普拉斯中的软断言或类似的东西
【发布时间】:2021-09-23 17:05:11
【问题描述】:
在我的测试结束时,我正在验证多个值以查看它们是否在表单中正确捕获。我正在使用期望语句。我意识到如果一个期望失败,休息将不会执行。
所有这些验证都是单个测试用例的一部分。我确实希望我的测试用例被标记为失败,即使一个期望失败但希望执行所有期望语句。所以我真的不能把它们分开。有替代方案吗?软断言是否适用于赛普拉斯?
verifyRoledetails(testobject) {
cy.contains('h3','Role details').nextUntil('button').should(($roledetails)=> {
expect($roledetails.children('label').get(0).innerText).to.eq('Role title');
expect($roledetails.children('p').get(0).innerText).to.eq(testobject.role_details.title);
expect($roledetails.children('label').get(1).innerText).to.eq('Where is the role based');
expect($roledetails.children('p').get(1).innerText).to.eq(testobject.role_details.role_basedat);
})
};
【问题讨论】:
标签:
mocha.js
cypress
chai
assertion
【解决方案1】:
请参阅此答案,它提供了使用包soft-assert 的直接方法
const jsonAssertion = require("soft-assert")
verifyRoledetails(testobject) {
cy.contains('h3','Role details').nextUntil('button')
.should(($roledetails)=> {
const label1Text = $roledetails.children('label').get(0).innerText;
jsonAssertion.softAssert(label1Text, 'Role title');
const p1Text = $roledetails.children('p').get(0).innerText;
jsonAssertion.softAssert(p1Text, testobject.role_details.title);
const label2Text = $roledetails.children('label').get(1).innerText;
jsonAssertion.softAssert(label2Text, 'Where is the role based');
const p2Text = $roledetails.children('p').get(1).innerText;
jsonAssertion.softAssert(p2Text, testobject.role_details.role_basedat);
jsonAssertion.softAssertAll(); // Now fail the test if above fails
})
})
但就格式而言,这有点失败。
要坚持expect().matcher() 模式,请尝试@alfonso-presa/soft-assert
const { proxy, flush } = require("@alfonso-presa/soft-assert");
const { expect } = require("chai");
const softExpect = proxy(expect);
verifyRoledetails(testobject) {
cy.contains('h3','Role details').nextUntil('button')
.should(($roledetails)=> {
const label1Text = $roledetails.children('label').get(0).innerText;
softExpect(label1Text).to.eq('Role title');
const p1Text = $roledetails.children('p').get(0).innerText;
softExpect(p1Text).to.eq(testobject.role_details.title);
const label2Text = $roledetails.children('label').get(1).innerText;
softExpect(label2Text).to.eq('Where is the role based');
const p2Text = $roledetails.children('p').get(1).innerText;
softExpect(p2Text).to.eq(testobject.role_details.role_basedat);
flush() // Now fail the test if above fails
})
})