如何在 Cypress 中更新夹具文件

use*_*982 7 javascript cypress

我在 cypress 中有一个固定文件,其中包含 json 数据

我希望在运行测试脚本时能够更新此固定文件中的字段

例如,固定装置文件将读取

 {
  table: [
    {
      name: 'Joe',
      number: 1,
    },
    {
      name: 'Bob',
      number: 2,
    },
  ],
};
Run Code Online (Sandbox Code Playgroud)

我想将数字字段更新为 3 和 4

我努力了

cy.fixture('dataFile.json')
  .as('data')
  .then((data) => {
    data.table[0].number = 3;
    data.table[1].number = 4;
  });
Run Code Online (Sandbox Code Playgroud)

但当我运行测试时它不起作用,我仍然看到所有内容的行为都好像数字字段仍然是 1 和 2。如果我将字段打印到控制台,我可以看到它们实际上已更新,但 cypress 仍在使用原始版本运行数据

我对 cypress 和 javascript 仍然很陌生。我该如何解决这个问题?

小智 10

可以在规范文件的顶部读取夹具,并针对规范中的所有测试进行修改。

这样您就可以避免在其他规格中使用灯具时出现意外问题

const data = require('cypress/fixtures/dataFile.json')

data.table[0].number = 3
data.table[1].number = 4

it('tests with altered fixture', () => {
  ...
})
Run Code Online (Sandbox Code Playgroud)


Ala*_*Das 6

您必须同时使用cy.readFile()cy.writeFile()来实现此目的。你可以这样写:

cy.readFile("cypress/fixtures/dataFile.json", (err, data) => {
    if (err) {
        return console.error(err);
    };
}).then((data) => {
    data.table[0].number = 3
    data.table[1].number = 4
    cy.writeFile("cypress/fixtures/dataFile.json", JSON.stringify(data))
})
Run Code Online (Sandbox Code Playgroud)


Ped*_*lli 6

使用修改夹具数据。

cy.fixture('user').then((user) => {
  user.firstName = 'Jane'
  cy.intercept('GET', '/users/1', user).as('getUser')
})

cy.visit('/users')
cy.wait('@getUser').then(({ request }) => {
  expect(request.body.firstName).to.eq('Jane')
})
Run Code Online (Sandbox Code Playgroud)

来自: https: //docs.cypress.io/api/commands/fixture#Modifying-fixture-data-before-using-it