#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
})
}