【问题标题】:Starting a test where the last one ended cypress在最后一个结束 cypress 的地方开始测试
【发布时间】:2021-09-01 07:39:15
【问题描述】:

我正在编写 UI 测试,我正在努力将我的测试分解为更小的测试,而不是进行一次长时间的测试。我使用faker来生成所有需要的数据,这样我就不用添加fixture了。 我当前的工作测试如下所示:

/// <reference types="cypress" />

import "cypress-audit/commands";

describe("Full system test", () => {
  before(function () {
    this.User = require("../../faker/user");
  });

it("Registers and creates profile", function () {
  cy.visit(Cypress.env("home_page"));
  cy.Register({});
  cy.UpdateProfile({});
  cy.AddCompanyDetails({});
  cy.AddTeamMember({});

  cy.CreateVacancy({});
  cy.AddCandidate({});
  cy.AddAdditionalDocs({});

 });
});

我想做的是这样的测试:

 /// <reference types="cypress" />

import "cypress-audit/commands";

describe("Full system test", () => {
 before(function () {
   this.User = require("../../faker/user");
 });

 it("Registers and creates profile", function () {
   cy.visit(Cypress.env("home_page"));
   cy.Register({});
   cy.contains("Vacancies").click();
   cy.UpdateProfile({});
   cy.contains("Vacancies").click();
   cy.AddCompanyDetails({});
   cy.contains("Vacancies").click();
   cy.AddTeamMember({});


 });

 it("Creates a vacancy and adds candidates", function () {
   cy.CreateVacancy({});
   cy.AddCandidate({});
   cy.AddAdditionalDocs({});
 });

我遇到的问题是,如果我像在第二个示例中那样分解它,faker 将生成新数据。此外,每次添加新测试时,我都需要重新登录。有没有办法让我继续上次测试结束的地方? 我想这样做的原因是因为我想看到测试工具中的测试被分解,这样更容易准确地看到失败的地方,而不是每次都必须解决它。有没有更简单的方法来做到这一点?

我希望它在测试工具中看起来像这样:

【问题讨论】:

    标签: javascript testing cypress


    【解决方案1】:

    您可以在测试顶部添加所需的数据,以确保在测试中传输相同的数据。

     /// <reference types="cypress" />
     import "cypress-audit/commands";
     var faker = require('faker');
     var randomName = faker.name.findName();
     var randomEmail = faker.internet.email();
    
     describe("Full system test", () => {
       before(function() {
         this.User = require("../../faker/user");
       });
    
       it("Registers and creates profile", function() {
         cy.visit(Cypress.env("home_page"));
         cy.Register({});
         cy.contains("Vacancies").click();
         cy.UpdateProfile({});
         cy.contains("Vacancies").click();
         cy.AddCompanyDetails({});
         cy.contains("Vacancies").click();
         cy.AddTeamMember({});
       });
    
       it("Creates a vacancy and adds candidates", function() {
         cy.CreateVacancy({});
         cy.AddCandidate({});
         cy.AddAdditionalDocs({});
       });
     })
    

    另一种方法是将带有 faker.js 代码的 before() 钩子移动到 cypress/support/index.js,因为这仅适用于 Run all specs cypress open,因为索引文件将被调用一次。但在cypress run 的情况下,index.js 文件在每个规范文件之前调用一次,因此数据会发生变化。

    【讨论】:

    • 我的faker文件中有我在每个之前导入的文件。我可以在每个之前导入它并获得相同的结果吗?我在该文件中生成了大量数据,并且不想在我的规范文件中添加所有内容。我将不得不在每次测试时重新登录,对吗?我已经进行了很多搜索,但我认为在最后一个结束的地方开始你的下一个测试是不可能的。
    • 您也可以导入beforeEach之前的文件。我已经在解决方案中做到了。当您说“我认为不可能在最后一个测试结束的地方开始您的下一个测试”时,我不确定您的意思。如果您是否可以为所有测试共享相同的测试数据,我提供了答案。
    猜你喜欢
    • 1970-01-01
    • 2020-07-27
    • 2016-04-12
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多