В настоящее время я экспериментирую с идеей использования Jest для живого тестирования API. Может быть, есть лучший инструмент, но я думаю, что это для другого обсуждения. Я столкнулся с проблемой, когда Jest возвращает ошибку: Expected one assertion to be called but received zero assertion calls.
, когда утверждение находится внутри второго обещания. Я думаю, что Jest поддержит вложение обещаний, но, похоже, оно не работает так, как ожидалось. Похоже, утверждение не возвращается. Этот синтаксис отлично работает с одним обещанием.
Я использую Jest V22.4.3 и Node V8.9.4.
новый-ticket.test.js
const call = require('../resources/call');
test('Create a new, valid ticket.', () => {
expect.assertions(1);
return call.makePostRequest(~login-url~, {
'username': 'xxxxx',
'password': 'xxxxx',
'version': 'xxxxx'
}).then((response) => {
call.makePostRequest(~ticket-url~, {
'inInvType': 1,
'inRetailOrClearance': 'R',
'inAction': 'L',
'inToken': response.token
}).then((response) => {
expect(response.retVal).toBe('0');
});
});
});
call.js
const https = require('https');
function makePostRequest(subURL, payload) {
let options,
request,
body;
// Convert our payload to JSON string.
payload = JSON.stringify(payload);
// Build our request options configuration.
options = {
hostname: ~base-url~,
port: 8443,
"rejectUnauthorized": false,
path: subURL,
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': '*/*'
},
observe: 'body',
responseType: 'json',
reportProgress: true,
withCredentials: false
};
body = '';
return new Promise((resolve) => {
request = https.request(options, (response) => {
// Collect our response data as it streams in.
response.on('data', (data) => {
body += data;
});
// Once ended, resolve with data.
response.on('end', () => {
body = JSON.parse(body);
resolve(body);
});
});
request.on('error', (err) => {
resolve(err)
});
request.write(payload);
request.end();
});
}
module.exports.makePostRequest = makePostRequest;