Cypress: выполнение HTTP-запроса, работающего с обещанием

#javascript #promise #cypress

#javascript #обещание #cypress

Вопрос:

Я пытаюсь сделать HTTP-запрос на своем сервере и проверить результат после. В настоящее время у меня есть результат в response объекте метода postCar. Но результат null зависит от теста then() метода.

В чем проблема?

 postCar($access_token, $body) {
        return new Cypress.Promise((resolve) => {
            let bodyString = '';
            cy.request({
                method: 'POST',
                url: '/applications',
                form: true,
                failOnStatusCode: false,
                body: $body,
                headers: {
                    Content: 'application/json',
                    Authorization: 'Bearer '   $access_token
                }
            })
            .then((response) => {
                cy.log('Response = '   JSON.stringify(response));
                resolve(response);
            });
        });
    }
  

Мой тест:

 it('Car Spec : create a car', function () {

    let accessToken = Cypress.env('ACCESS_TOKEN')
    var correct_body = getValidBody();

    cy.postCar(accessToken, correct_body).then(function(res) {
       cy.log('Application Spec : postCar response :'   JSON.stringify(res));
    });

});
  

Комментарии:

1. итак cy.log('Response = ' JSON.stringify(response)); , результаты Response = null ?

2. Глядя на документы, вы не можете просто return cy.request(... ? Обертывание всего этого в обещание, а затем разрешение ответа кажется излишним. Возможно, я что-то упускаю

3. @JaromandaX Нет cy.log('Application Spec : postCar response :' JSON.stringify(res)); , это значение равно нулю

4. @dbramwell Не могли бы вы привести пример?

5. таким cy.log('Response = ' JSON.stringify(response)); образом, выводится значение

Ответ №1:

Вы не должны заключать команду в Promise . Пользовательские команды Cypress не предназначены для возврата обещаний. Попробуйте только это:

 function postCar ($access_token, $body) {

    let bodyString = ''

    cy.request({
      method: 'POST',
      url: '/applications',
      form: true,
      failOnStatusCode: false,
      body: $body,
      headers: {
        Content: 'application/json',
        Authorization: `Bearer ${$access_token}`,
      },
    })
    .then((response) => {
      cy.log(`Response = ${JSON.stringify(response)}`)
      return response
    })
}