我正在测试一个非常复杂的报价工具,我需要测试折扣保证金价格和折扣价格。假设目录中的价格是100美元,合伙人得到25%的折扣,那么合作伙伴的价格是75美元。
我应该像这样测试-> cy.get(partnerPriceField)/should('have.value', 75)吗?
或-> cy.get(partner PriceField)/should('have.value', catalogPrice * (1-discount/100))
发布于 2022-07-13 20:24:28
cy.get(partnerPriceField).should('have.value', 75)是e2e测试的首选。
测试计算的工作由单元测试完成,该测试与源代码非常接近,因此当src计算发生更改时,可以更改测试。
e2e测试的任务是确保给定一些输入数据,页面显示输出数据(黑匣子)。
最好是在夹具表中提供输入和输出,当计算被修改时,该表很容易调整。
发布于 2022-07-13 19:39:44
您可以用.contains()传递一个正则表达式,然后用一个断言来检查这个值是可见的。
const fullPrice = 100
const discount = .25
const discountPrice = fullPrice * discount
const regexMatcher = new RegExp(`$${discountPrice}`) // equals /\$75/
cy.contains('.selector-containing-price-text', regexMatcher)
.should('be.visible')发布于 2022-07-13 18:32:19
我建议您使用第二个选项,因为在这种情况下,如果将来catalog price或discount value发生变化,则不必更改逻辑,因为它是通用的。尽管如此,要使第二个选项工作,您必须首先将catalogPrice和折扣更改为数字,然后在计算之后,您必须将最终答案转换为字符串,然后执行最后的断言,如下所示:
cy.get('partner PriceField').should(
'have.value',
(+catalogPrice * (1 - +discount / 100)).toString()
)以下是您的计算方式:

另外,如果您的catalogPrice以100$的形式出现,而折扣以25%的形式出现,只需添加.replace(/\D/g,'')以删除%和$即可。在本例中,您的断言如下所示:
cy.get('partner PriceField').should(
'have.value',
(
+catalogPrice.replace(/\D/g, '') *
(1 - +discount.replace(/\D/g, '') / 100)
).toString()
)您的计算将如下所示:

https://stackoverflow.com/questions/72970975
复制相似问题