У меня есть AWS Node.JS Lambda, который делает HTTP-запрос, который я хотел бы протестировать с помощью Sinon. JS. Соответствующий фрагмент лямбда-кода:
const postReq = httpsRequest.request(options, (response) => {
if (response.statusCode == 200) {
var jsonResponse = "";
response.on("data", chunk => {
jsonResponse += chunk;
});
response.on("end", () => {
...
}
}
}
Проблема заключается в насмешке через Sinon:
const sinon = require('sinon');
const httpsRequest = require('https');
...
let expectedHTTPResponse = {
"statusCode": 200,
"errMessage": "",
"response": { message: "Hello"}
}
const mockRes = (options = {}) => {
const ret = expectedHTTPResponse;
return Object.assign(ret, {
end: sinon.stub().returns(ret),
on: sinon.stub().returns(ret),
}, options)
}
let sinonSandbox = sinon.createSandbox();
beforeEach((done) => {
sinonSandbox.stub(httpsRequest, 'request').yields(expectedHTTPResponse);
done();
})
Если я передам ожидаемый HTML-ответ , я получаю сообщение об ошибке что:
Error TypeError: response.on is not a function
Хорошо, я понял, что ожидаемый JSON объект, который я передал, не имеет функций на и end . Итак, я попытался создать фиктивный объект ответа ( mockRes , показанный выше), например:
const mockResponse = mockRes();
sinonSandbox.stub(httpsRequest, 'request').yields(mockResponse);
, который отвечал бы на на и end , но я получил другую ошибку. Как вы имитируете объект HTTP-ответа через Sinon. js, где вы можете определить значение ответа?