Получение покрытия со Стамбулом при заглушке с Синон

У меня есть приведенная ниже функция, которую я заглушаю с помощью Sinon, но частично не могу зарегистрироваться как покрытая при использовании Istanbul:

var funct1 = function(a, b ,c, callback(err, resp) {
    //do something
      someFunction.authenticate(d, e , callback(error, respObj))

});

someFunction — внешний модуль в той же папке проекта, что и authentication — пользовательская функция в модуле someFunction, для которой должна быть создана заглушка. Он возвращает обратный вызов с двумя параметрами err и resp, как показано ниже.

Я создал заглушку следующим образом,

var sinon = require('sinon');
var functionSub = sinon.stub(the path to someFunction, "authenticate");

functionStub.returns(function() {
   return (null, {});
}

При использовании Mocha и Istanbul я проверил покрытие, но не смог получить его для строки someFunction.authenticate(d, e, callback(error, respObj)), выделенной курсивом.

Как я могу это сделать?


person Owner    schedule 14.10.2016    source источник


Ответы (1)


Насколько я понимаю, что-то вроде ниже должно работать для вас.

const auth = require('path-to-auth');
const sinon = require('sinon);

describe('Auth', () => {
  it('should call authenticate', () => {
    const authMock = sinon.stub(auth, 'authenticate').returns(() => {});
    // call the function to be tested here
    expect(auth.authenticate.calledOnce).to.equal(true);
    auth.authenticate.restore();
  });
});
person anoop    schedule 15.10.2016
comment
Выдает ошибку AssertionError: ожидается, что [Function: proxy] будет равно true. Для моей цели я использовал заглушку во многих тестовых случаях и должен объявить их в цикле перед каждым. Не могли бы вы рассказать мне дальнейшие шаги от этого. - person Owner; 16.10.2016
comment
проверьте обновленный ответ. Вы можете заглушить его в блоке it или в блоке beforeEach, это не имеет значения. Но обязательно восстановите его после использования. - person anoop; 16.10.2016
comment
я только что проверил это и работает, убедитесь, что эта строка верна в вашем файле --› expect(auth.authenticate.calledOnce).to.equal(true); - person anoop; 16.10.2016
comment
можете ли вы обновить код, который вы пытаетесь (в вопросе)? - person anoop; 16.10.2016