由于以下原因无法实例化模块ng:错误:[$ injector:unpr] http://errors.angularjs.org/undefined/$injector/unpr?p0=%24logProvider

时间:2013-09-25 12:15:25

标签: angularjs

我创建它来装饰$ log:

    window.fofr = window.fofr || {};
window.fofr.library = window.fofr.library || {};
window.fofr.library.logging = window.fofr.library.logging || {};

window.fofr.library.logging.errorLogViewerService = function () {
    var configure = function (angularJsModule) {
        angularJsModule.config(function ($provide) {
            $provide.decorator('$log', function ($delegate, $sniffer) {
                var _error = $delegate.error; // Saving original function
                var _log = $delegate.log;
                $delegate.logs = [];

                $delegate.error = function (msg) {
                    _error(msg);
                };

                $delegate.log = function (msg) {
                    _log(msg);

                    $delegate.logs.push(msg);
                };

                return $delegate;
            });
        });
    };

    return {
        configure: configure
    };
} ();

我使用qunit创建一个单元测试:

    module('Library - Logging - ErrorLogViewer', {
    setup: function () {
        this.app = angular.module('app', []);        
    }
});

test('Log - check the logs is filled with log', function () {
    window.fofr.library.logging.errorLogViewerService.configure(this.app);
    var injector = angular.injector(['app', 'ng']);

    injector.invoke(function ($log) {
        $log.log('test');
        equal($log.hasOwnProperty('logs'), true, 'The property logs must exists');
        equal($log.logs.length, 1, 'The logs must contain one log');
    });
});

但它在配置中崩溃说它不知道logProvider ???

1 个答案:

答案 0 :(得分:2)

好吧,我发现,$ log是在ng模块中定义的,模块中的角度搜索是由代码中设置的顺序定义的:angular.injector(['app','ng']); 所以我设置了这个angular.injector(['ng','app']);现在它有效!