cypress - 如何修改夹具并使用修改后的夹具拦截响应

我正在尝试修改现有的夹具,然后用修改后的夹具覆盖响应。

我可以使用预定义的夹具覆盖响应或修改实际响应,但我不能同时进行它们。

例如,可以修改实际响应:

cy.intercept("POST", "response", (req) => {
  req.continue((res) => {
    res.body.result..... = false;
    res.send();
  });
});

我也使用它来使用夹具覆盖响应:

Cypress.Commands.add("override", (url: string, fixture: string) => {
  cy.intercept(
    'url',
    fixtureName.json
  );
});

我可以使用 cy.readFile() 来读取夹具和 cy.writeFile() 来修改它,但我不想使用这个解决方案。

先感谢您

回答1

您可以使用 https://docs.cypress.io/api/commands/fixture#Accessing-Fixture-Data 来加载您的夹具文件,然后使用 .then() 来修改数据并将其作为拦截响应的一部分。

cy.fixture('fruit.json').then((data) => {
  data.fruit = 'Kiwi'
  cy.intercept('GET', '/fruit', fruit).as('getFruit')
})

// test code to trigger request
cy.wait('@getFruit').then(({ request }) => {
  expect(request.body.fruit).to.eq('Kiwi')
})

回答2

您可能希望使用扩展运算符以某种方式“合并”响应和固定?

cy.fixture('my-fixture.json').then(fixture => {

  cy.intercept("POST", "response", (req) => {
    req.continue((res) => {
      res.body = {
        ...fixture,              // mostly fixture properties
        result: res.body.result  // except for "result"
      }
      res.send();
    })
  })
})

或者

cy.fixture('my-fixture.json').then(fixture => {

  cy.intercept("POST", "response", (req) => {
    req.continue((res) => {
      res.body = {
        ...res.body,             // mostly res properties
        result: fixture.result   // except "result" from fixture
      }
      res.send();
    })
  })
})

相似文章