Не удалось заблокировать модуль запроса в асинхронной функции, которая использует обещания

У меня есть функция, которая делает асинхронный вызов и разрешает с помощью Promise. main.js:

var request = require('request');
var Promise = require('promise');
var makeAsyncCall = function () {
    return new Promise(function (resolve, reject) {
        request.get('https://www.google.com', function (err, res) {
            if (err){
                reject(err);
            } 
            else{
                resolve("Obtained response successfully");
            }
        });
    });
}

Я пытаюсь написать пример модульного теста для вышеуказанного метода, используя sinon и chai. Ниже мой файл test.js:

var chai = require('chai');
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);
var should = chai.should();
var main = require('./myapp.js');
var sinon = require('sinon');
var mockery = require('mockery');

mockery.enable({
    warnOnReplace: false,
    warnOnUnregistered: false,
    useCleanCache: true
});
var stub = sinon.stub();
mockery.registerMock('request', stub);
var count;

describe('Test Suite for function with promise',function(){

     //executes before the test cases from this suite begin
    before(function(){
        count = 0;
        console.log("--------------starting Test Suite-----------");
    });
    //executes after all the test cases from this suite have executed
    after(function(){
        mockery.disable();
    });

it.only('Test case makeAsyncCall() with stub - using should',function(done){
        //providing fake output
        stub.onCall(count++).yields({
            "statusCode": 404,
            "body": {
                "message": "Resource not found"
            }
        }, null);
        main.makeAsyncCall().should.be.rejected.and.notify(done);
    });
});

Когда я запускаю тестовый пример, он терпит неудачу, потому что обещание должно было быть отклонено, но успешно выполнено. Я подозреваю, что модуль запроса не был правильно смоделирован. В запросе request.get используется обратный вызов, поэтому я поставил его и выдал ошибку. Я что-то пропустил?

0 ответов

Другие вопросы по тегам