2017-01-30 6 views
0

У меня есть некоторый код, который выглядит следующим образом, в файле с именем logger.tsШпионаж на функции внутри функции

(function (logger) { 
logger.getLogger = function() { 
    var log4js = require('log4js'); 
    log4js.configure(__dirname + "/../log4js-config.json"); 
    var logger = log4js.getLogger(require('path').basename(__filename)); 
    return logger; 
}; 
})(module.exports); 

Теперь, регистратор, который получает возвращенное здесь является объектом, который содержит такие методы, как «информация 'и' error '. Я хочу следить за этими методами и утверждать, что они вызывались с определенными параметрами.

Я использую этот код в других классах и хочу посмеяться над методами «error» и «info». Поэтому я написал это в моем тесте

var loggerStub = require('logger'); 
sinon.spy(loggerStub.getLogger, 'info'); 

it("should log the query", function() { 
      var spyCall = loggerStub.info.getCall(0); 
      expect(spyCall.args[0]).deep.equal("error: " + somethingVariable); 
     }); 

Бег это дает мне ошибку:

Attempted to wrap undefined property info as function. 

Что я делаю неправильно?

ответ

1

Вы смотрите на объект (info) своей собственной функции (getLogger), который вы никогда не устанавливаете вместо log4js.info.

быстрый способ (не уверен, что, если тот хорошо для вас), чтобы решить эту проблему, является на самом деле создать регистратор и шпион в возвращаемом методе объектов инфо:

var logger = require('logger').getLogger(); // be aware that an actual logger is created! 
sinon.spy(logger, 'info'); 

it("should log the query", function() { 
      var spyCall = logger.info.getCall(0); 
      expect(spyCall.args[0]).deep.equal("error: " + somethingVariable); 
     });