В настоящее время я пытаюсь смоделировать шаблон ответа клиент-сервер с помощью Cypress.
Я хотел бы:
- Использовать cy.route для перехвата вызова, чтобы установить данные, когдаЯ нажимаю кнопку «Сохранить»
- Запишите ответ в файл, используя параметр onResponse моего cy.route
- Используйте содержимое файла как мой ответ на тот же вызов cy.route
В настоящее время, если я включаю команду cy.writeFile или даже команду console.log (cy.readFile (testFile)), я получаю сообщение об ошибке при вызове маршрута с помощью cy.wait.
Ошибка:
application_actions.js:84 Uncaught (in promise) TypeError: Cannot read property 'statusText' of undefined
Если я удаляю cy.writeFile или readFile из моего блока onResponse, код выполняется нормально.
Вот пример того, что я делаю:
beforeEach(() => {
//call fixture file
cy.fixture('newApplication.json').as('newApplication')
cy.server()
//This first route is used when I load a page that contains application data.
//This works fine
cy.route('GET', 'applications/*', '@newApplication').as('getNewApplication')
//This route is hit when I click a Save Button to save updates to my application data
cy.route({
method: 'PATCH',
url: 'applications/update/*',
onRequest: (xhr) => {
cy.writeFile('cypress/fixtures/newApplication.json', xhr.request.body.application)
},
response: '@newApplication'
})
.as('updatedApplication')
cy.visit('/admin/review_application/1')
cy.wait('@getNewApplication')
.its('response.headers')
.its('content-type')
.should('contain','application/json')
});
it.only('Saving Restaurant Name changes page header text', () => {
//Alter some application data
cy.get('#Restaurant\\ Name')
.clear()
.type('Header Update Test');
cy.get('#name-buttons\\ Accept').click();
//Click save button to save data change
clickSaveButton();
//hit updatedApplication route when data is saved
cy.wait('@updatedApplication').should('have.property','status',200)
//Test fails on above wait every time
cy.reload();
cy.wait('@getNewApplication')
cy.get('#Restaurant\\ Name').then($newText => {
//compare text values to ensure the data change was saved
cy.get('.MuiTypography-h2').then($headerText => {
expect($headerText).to.have.text($newText.prop('value'));
});
});
Кажется, что cy.route полностью синхронен, поэтому, возможно, это невозможно, или, возможно, я делаю что-то не так.
Любая помощь будет признательна!