您可以这样准备XHR存根:
describe('', () => {
let requests = {}; // for store sent request
beforeEach(() => {
cy.server({ delay: 500 }); // cypress will answer for mocked xhr after 0.5s
cy.route({
url: '<URL>',
method: 'POST',
response: 'fixture:response',
onRequest: ({ request }) => {
Object.assign(requests, { someRequest: request.body }); // it has to be mutated
},
});
});
然后在测试中:
it('', () => {
cy
.doSomeSteps()
.assertEqual(requests, 'someRequest', { data: 42 })
});
这种解决方案有两个优点:第一个0.5秒的延迟使测试更现实,因为真正的后端不会立即响应。其次,您可以验证应用程序是否会在以下时间发送正确的有效载荷
doSomeActions()
步骤。
assertEqual
只是为了使断言更具可读性
Cypress.Commands.add('assertEqual', (obj, key, value) =>
cy
.wrap(obj)
.its(key)
.should('deep.equal', value)
);