我正在尝试修改现有的夹具,然后用修改后的夹具覆盖响应。
我可以使用预定义的夹具覆盖响应或修改实际响应,但我不能同时进行它们。
例如,可以修改实际响应:
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();
})
})
})