Sinon заглушка запрос-обещание для клиентского модульного теста - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть 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");
      }
  });

1 Ответ

0 голосов
/ 23 сентября 2019

Это делает это:

   beforeEach(function() {
        console.log("=== TestServiceClient BEFORE EACH =====");
        sandbox = sinon.createSandbox();
        sandbox.stub(requestPromise, 'Request').resolves({
            statusCode: 200,
            body: "Dummy Response"
        }); 
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...