【发布时间】:2020-12-24 14:56:13
【问题描述】:
所以,我有以下结构中的元素:
<div class="MuiBox-root" data-testid="all-events">
<ul ....>
<div class="MuiBox-root" data-testid="event">
<div class="MuiBox-root" data-testid="event">
<div class="MuiBox-root" data-testid="event">
现在,在每个 event 元素中都有以下结构:
<div class="MuiBox-root" data-testid="event">
<li .....>
<div class="MuiBox-root ....." data-testid="event-status">
<div> Text Value </div>
<div class="MuiBox-root ....." data-testid="event-name">
所以,我要测试的是,如果元素 event-status 说已完成或处于活动状态,那么元素 event-name 将存在。所以我使用的方法如下:
cy.get("[data-testid='events']").its("length").then((numEvents) => {
for (let i = 0; i < numEvents; i++) {
cy.get("[data-testid='event-status']").each((status, index) => {
if (index === i) {
if (isEventActive(status)) {
cy.get("[data-testid='event-name']").each((name, index) => {
if (index === i) {
cy.get(name).should("have.text", "some value");
}
});
} else {
cy.get("[data-testid='event-name']").each((name, index) => {
if (index === i) {
cy.get(name).should("not.exist");
}
});
}
}
});
}
});
上面的代码正在测试我想要测试的东西,但它非常混乱,欢迎任何更简单的方法。
【问题讨论】:
-
您可以将
index === 0检查替换为更灵活的内容,例如if (event-status === 'condition')
标签: javascript reactjs automated-tests cypress