AngularJS单元测试问题:注入$location

AngularJS单元测试问题:注入$location,angularjs,unit-testing,testing,location,Angularjs,Unit Testing,Testing,Location,我在测试routeProvider时遇到问题。那里似乎有很多信息,但我所做的每件事,我都无法让单元测试消化位置。我希望能在这里找到一些解决办法。我正在摸索通过angularJS和单元测试的方法,可以使用任何建议 以下是routeProvider函数: use strict'; var myApp = angular.module('myApp', [ 'ngRoute', 'myServices', 'myControllers' ]); myApp.config(['$rout

我在测试routeProvider时遇到问题。那里似乎有很多信息,但我所做的每件事,我都无法让单元测试消化位置。我希望能在这里找到一些解决办法。我正在摸索通过angularJS和单元测试的方法,可以使用任何建议

以下是routeProvider函数:

use strict';

var myApp = angular.module('myApp', [
  'ngRoute',
  'myServices',
  'myControllers'
]);

myApp.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('fooBar', {
        templateUrl: 'barFoo',
        controller: 'SummaryCtrl'
      }).
      otherwise({
        redirectTo: 'defaultFooBar'
      });

  }]);
我试图用以下内容测试这个routeProvider,但在我的一生中,我无法将我所做的更改注入到位置

'use strict';

describe('myApp',function() {
    var $scope;
    var location;

    beforeEach(inject(function($rootScope, $location) {
        $scope = $rootScope;
        location = $location;
    }));

    it('redirect to default', function() {
      location.path('efipoejs');
      $scope.$apply();
      expect(location.path()).toBe('defaultFooBar');
    })
});
我试过$scope.$digest和$apply。。。。无论我做什么,我总是得到这样的结果:

Expected '/efipoejs' to be 'defaultFooBar'.
我真的很想让angularJS工作。。。如果你有什么建议可以引导我走上正确的道路…我将非常感激

回答:因为我不能在8小时内发布答案

哟,是的

我是这样做的

describe('Testing routes', function() {
    beforeEach(module('myApp'));

    var location, route, rootScope;

    beforeEach(inject(
        function( $location, $route, $rootScope ) {
            location = $location;
            route = $route;
            rootScope = $rootScope;
        }));

    describe('Default Routing', function() {
        beforeEach(inject(
            function($httpBackend) {
                $httpBackend.expectGET('DefaultUrl').respond(200);
            }));

        it('should load the default page on fake path', function() {
            location.path('/ermagerd');
            rootScope.$digest();
            expect(location.path()).toBe('defaultFooBar');
        });

        });
    });
});
再一次,这是我的逻辑

'use strict';

var myApp = angular.module('myApp', [
  'ngRoute',
  'myServices',
  'myControllers'
]);

myApp.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('fooBarDefault', {
        templateUrl: 'defaultUrl',
        controller: 'DefaultCtrl'
      }).
      otherwise({
        redirectTo: 'fooBarDefault'
      });

  }]);

在运行测试之前是否加载了模块?在每个模块“myApp”之前?在每个模块“myApp”之前;我在另一行之前加了那一行。。。似乎有同样的效果,没有得到我期望得到的输出。这可能需要一个集成测试。不确定…@AlexC你能详细说明一下吗?e2e。。我还没有对e2e做过太多的研究,但如果这是我需要走的路线,我会很乐意走这条路。您可能能够进行单元测试,但我认为e2e将更好地解决这部分代码。我也不是专家,所以我不想告诉你怎么做。希望你能很快得到一个更完整的答案。