javascript - 如何使用 Cypress 和 @testing-library/cypress 测试复选框切换,

标签 javascript cypress testing-library cypress-testing-library

我正在尝试使用 Cypress 测试库编写测试 Accordion 的切换操作。 下面是 Accordion 的标记,它是使用复选框 hack 进行切换的:

 <div class='accordion'>
                <div class='accordion__item'>
                    <input style="display:none" type="checkbox"  id="item1"/>
                    <label class="accordion__itemLabel"for="item1">FAQ's</label>
                    <div style="display:none" class="accordion__itemContent"> FAQ Content Here </div>
                </div>
                <div class='accordion__item'>
                    <input style="display:none" type="checkbox"  id="item2"/>
                    <label class="accordion__itemLabel"for="item2">Contact us details</label>
                    <div style="display:none" class="accordion__itemContent"> Contact us details here </div>
                </div>
 </div>

测试如下:

    it("should toggle accordion ", () => {
            const checkbox = cy.findByRole({ role: "checkbox" });
            expect(checkbox.checked).equal(false);
            cy.get(".accordion__itemContent").invoke("display").equal("none")
            fireEvent.click(checkbox)
            expect(checkbox.checked).equal(true);
            cy.get(".accordion__itemContent").invoke("display").equal("block")
        })

问题是 cy.findByRole({ role: "checkbox"}); 总是返回 undefined ,我该如何解决这个问题或以正确的方式编写上面的测试。

谢谢

最佳答案

基于the Cypress Testing Library examples ,您应该将其作为第一个参数传递,而不是在对象中传递 Angular 色 (cy.findByRole({ role: "checkbox"})):

cy.findByRole("checkbox");

除此之外,正如 Jonah 指出的那样,我认为您的测试可能会失败,因为您试图将 cy.findByRole 的返回值分配给变量。在 Cypress 中,一切都是异步的,因此您需要链接您的断言。 the Cypress documentation对此进行了更深入的解释。 .

这是您根据上述所有内容重写的测试用例:

cy.findByRole("checkbox").should("not.be.checked");
cy.get(".accordion__itemContent").invoke("display").equal("none")
cy.findByRole("checkbox")
  .check()
  .should("be.checked");
cy.get(".accordion__itemContent").invoke("display").equal("block")

关于javascript - 如何使用 Cypress 和 @testing-library/cypress 测试复选框切换,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63815574/

相关文章:

javascript - 创建具有值参数而不是引用的函数引用

date - 在 Cypress 输入的日期上按Enter键

nuxt.js - 如何通过cypress拦截服务器端api调用

reactjs - 如何使用 React 测试库测试 `contenteditable` 事件

javascript - ReactJS : Failed to load plugin 'testing-library' declared in 'package.json : Cannot find module ' ./eslint-utils'

javascript - 在使用 Marionette 渲染的两个模板之间进行选择

php - 使用 PHP 动态创建 Javascript 的更简单方法

javascript - Twitter 分享按钮动态 URL 分享

javascript - 跨多台机器的 Cypress [Azure Devops]

javascript - fireEvent.click 后组件未更新