У меня есть HTTP-клиент Node.js, который использует запрос-обещание для выполнения операций GET и PUT для удаленной службы.Код клиента ниже.Я пытаюсь написать модульные тесты и заглушить запрос requestPromise (options), чтобы я получил фиктивный ответ вроде:
{
statusCode: 200,
body: "Dummy Reponse"
}
Здесь мой клиент:
module.exports.getSensorData = async function(parms) {
let response = {};
let endpoint = null;
try {
endpoint = buildGetURL(parms);
var options = {
method: 'GET',
uri: endpoint,
json: false,
resolveWithFullResponse: true
};
console.log(`Connecting to Service at: ${endpoint}`);
let serviceResponse = await requestPromise(options); <-- stub this
response.statusCode = serviceResponse.statusCode;
response.body = serviceResponse.body;
} catch (err) {
let msg = `Service Client Error ${endpoint}`;
response.statusCode = 500;
}
// Done
return response;
}
I 'Я пробовал кое-что с Синоном, но мне не ясно, как это сделать.В идеале я хочу что-то подобное в моем модульном тесте:
const sinon = require('sinon');
const requestPromise = require('request-promise');
const serviceClient = require("../ServiceClient");
let sandbox = null;
describe("Test My Client", function() {
beforeEach(function() {
sandbox = sinon.createSandbox();
sandbox.stub(requestPromise).callsFake(options) => {
return {
statusCode: 200,
body: "Dummy Response"
}
});
});
afterEach(function() {
sandbox.restore();
});
it("My Client Test", (done) => {
serviceClient.getSensorData(parms)
.then(function(response) {
assert.equal(response.statusCode,200);
assert.equal(response.body,"Dummy Response");
}
});