【问题标题】:Error: [$injector:unpr] Unknown provider: $routeProvider, Failed to instantiate module myApp due to错误:[$injector:unpr] 未知提供者:$routeProvider,无法实例化模块 myApp,原因是
【发布时间】:2016-05-10 00:10:41
【问题描述】:

我对单元测试很陌生,在运行 Grunt Test 时遇到了这个非常奇怪的错误。

TypeError: 'undefined' is not an object (evaluating '$websocketBackend.mock')


Error: [$injector:modulerr] Failed to instantiate module myApp due to:

Error: [$injector:unpr] Unknown provider: $routeProvider

spec.js

    describe('test d3mapping websocket', function () {
        var testScope, $controller, $websocketBackend;
        //
        //beforeEach(function() {
        //    module('myApp');
        //    module('ngWebSocket', 'ngWebSocketMock');
        //    inject(function(_$controller_, $rootScope, _$websocketBackend_) {
        //        $controller = _$controller_;
        //        testScope = $rootScope.$new();
        //
        //        $websocketBackend = _$websocketBackend_;
        //
        //    });
        //});

        describe('response', function() {

            beforeEach(function() {
                module('myApp');
                module('ngWebSocket', 'ngWebSocketMock');
                inject(function(_$controller_, $rootScope, _$websocketBackend_) {
                    $controller = _$controller_;
                    testScope = $rootScope.$new();

                    $websocketBackend = _$websocketBackend_;
                });
                $controller('MainCtrl', {
                    $scope: testScope
                });
            });

            it('should send/receive json',
                function() {
                    $websocketBackend.mock();
//server url omitted
                    $websocketBackend.expectConnect("ws://server");
                    $websocketBackend.expectSend(JSON.stringify('{"nodes":[{"name":"A6EBL","group":2,"size":5},{"name":"GBYGC","group":2,"size":5},{"name":"KORD","group":1,"size":10},{"name":"EGLL","group":1,"size":10},{"name":"DNMM","group":1,"size":10}],"links":[{"source":2,"target":1,"value":1},{"source":3,"target":1,"value":1},{"source":3,"target":1,"value":1},{"source":2,"target":1,"value":1},{"source":4,"target":1,"value":1},{"source":3,"target":1,"value":1}]}'));
                }
            );
        });
    });

    // test svg


    describe('Test D3.js with jasmine ', function () {
        var testScope;

        beforeEach(function () {

            module('myApp');
            inject(function ($controller, $rootScope) {
                testScope = $rootScope.$new();
                $controller('MainCtrl', {
                    $scope: testScope
                });
            });
        });



        describe('the svg', function () {
            it('should be created', function () {
                expect(getSvg()).not.toBeNull();
            });
        });

        function getSvg() {
            return document.getElementsByTagName('svg');
        }

    });

任何建议都会有所帮助

【问题讨论】:

    标签: angularjs unit-testing karma-jasmine


    【解决方案1】:

    有趣的是,Angular 无法确定$webSocketBackend.mock$routeProvider。我的猜测是您的依赖项之一未能注入,现在当 Angular 使用注入的依赖项时会导致问题。

    只是猜测 - 但是,参考类似的 Stack Overflow 问题 Failed to instantiate module [$injector:unpr] Unknown provider: $routeProvider

    您的控制器是否可以同时访问$routeProvider$webSocketBackend

    ngRoute 模块不再是核心 angular.js 文件的一部分。如果 您将继续使用 $routeProvider 那么您现在需要 在您的 HTML 中包含 angular-route.js:

    【讨论】:

      猜你喜欢
      • 2013-08-31
      • 2014-09-24
      • 1970-01-01
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 2016-03-26
      • 2014-07-19
      相关资源
      最近更新 更多