【问题标题】:How should you structure CRUD cypress tests?你应该如何构建 CRUD cypress 测试?
【发布时间】:2021-11-04 05:43:46
【问题描述】:

我正在开发一个 React 应用,我们的团队正在为它编写 Cypress 测试。我们想测试基本的 CRUD 功能,所以我们创建了三个测试:

  • 创建用户
  • 更新用户
  • 删除用户

CREATE 测试使用夹具来定义新用户。

UPDATE 和 DELETE 测试引用同一个夹具,并更新和删除在前一个测试中创建的用户。这意味着 UPDATE 和 DELETE 测试依赖于 CREATE 测试。这样可以吗?

根据我正在阅读的内容,听起来每个赛普拉斯测试都应该能够独立运行,我可以看到这里不是这种情况。

但是,最好的方法是什么?

我认为从 CREATE 测试中复制和粘贴相同的 10-20 行代码并在 UPDATE 和 DELETE 测试中复制它们是没有意义的。有没有办法我们可以抽象 CREATE 测试并将其包含在 UPDATE 和 DELETE 测试中?

或者我们应该将所有三个测试组合成一个“CRUD 用户”测试?

【问题讨论】:

    标签: cypress crud


    【解决方案1】:

    根据我正在阅读的内容,听起来每个 Cypress 测试都应该能够独立运行。

    理想情况下,是的。有几个原因:

    • 理论上,如果一项测试失败,其他测试仍然可以通过;但是,如果您创建某个实体(在您的情况下为用户)的测试失败了,其他的肯定会失败,但不是因为他们关注的内容
    • 您实际上没有办法确保测试将以相同的顺序执行;虽然在赛普拉斯我认为它是基于字母顺序的,但这可能不适用于其他工具,甚至未来的赛普拉斯;或者你决定在某处添加一些测试来改变测试的顺序,突然之间一些测试会失败,你不会立即知道为什么

    我认为从 CREATE 测试中复制和粘贴相同的 10-20 行代码并在 UPDATE 和 DELETE 测试中复制它们是没有意义的。有没有办法我们可以抽象 CREATE 测试并将其包含在 UPDATE 和 DELETE 测试中?

    赛普拉斯提供例如commands,因此您的最终测试代码可能如下所示:

    it('CREATE user', () => {
      cy
        .fixture('user')
        .then(user => {
          cy
            .createUser(user)
            // whatever checks you need to perform here
            .its('response.statusCode')
            .should('eq', 201); 
        });
    });
    

    如果你的 10-20 行代码隐藏在 cy.createUser() 后面,你可以轻松地在其他测试中重用它:

    it('DELETE user', () => {
      cy
        .fixture('anotherUser')
        .then(anotherUser => {
          cy
            .createUser(anotherUser)
            .then(response => {
              cy
                .deleteUser(response.body.id)
                // whatever checks you need to perform
                .its('response.statusCode')
                .should('eq', 204);
            });
        });
    });
    

    我认为这样的代码很容易阅读,测试也很短,所以如果需要的话很容易维护。

    【讨论】:

    • 我可以在上面添加钩子和 API 调用。您不需要通过 UI 为每个测试创建用户。如果案例需要验证用户创建表单,则仅在第一次测试时进行 - 在 CREATE 上。对于 EDIT 和 DELETE,只需通过 API 调用创建用户 - 包装在 beforeEach 挂钩中。
    猜你喜欢
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    相关资源
    最近更新 更多