$log サービスの機能を拡張するデコレータが Angular にあり、それをテストしたいのですが、これを行う方法がわかりません。ここに私のデコレータのスタブがあります:
angular.module('myApp')
.config(function ($provide) {
$provide.decorator('$log', ['$delegate', function($delegate) {
var _debug = $delegate.debug;
$delegate.debug = function() {
var args = [].slice.call(arguments);
// Do some custom stuff
window.console.info('inside delegated method!');
_debug.apply(null, args);
};
return $delegate
}]);
});
これは基本的にメソッドをオーバーライドし、$log.debug()
いくつかのカスタム処理を行った後に呼び出すことに注意してください。私のアプリではこれが機能'inside delegated method!'
し、コンソールにメッセージが表示されます。しかし、私のテストでは、その出力が得られません。
デコレータの機能をテストするにはどうすればよいですか??
具体的には、実際にモック実装を装飾するようにデコレーターを注入するにはどうすればよい$log
ですか (以下を参照)。
これが私の現在のテストです(モカ/チャイですが、実際には関係ありません):
describe('Log Decorator', function () {
var MockNativeLog;
beforeEach(function() {
MockNativeLog = {
debug: chai.spy(function() { window.console.log("\nmock debug call\n"); })
};
});
beforeEach(angular.mock.module('myApp'));
beforeEach(function() {
angular.mock.module(function ($provide) {
$provide.value('$log', MockNativeLog);
});
});
describe('The logger', function() {
it('should go through the delegate', inject(function($log) {
// this calls my mock (above), but NOT the $log decorator
// how do I get the decorator to delegate the $log module??
$log.debug();
MockNativeLog.debug.should.have.been.called(1);
}));
});
});