Не удалось заблокировать модуль запроса в асинхронной функции, которая использует обещания
У меня есть функция, которая делает асинхронный вызов и разрешает с помощью 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 используется обратный вызов, поэтому я поставил его и выдал ошибку. Я что-то пропустил?