7

这是我的运行块,我在其中rootScope根据位置路径设置了几个属性:

angular.module('xyz').run(['$rootScope', '$location', '$route', function($rootScope, $location, $route){
    $rootScope.brand = $location.path().split('/')[1];
    $rootScope.appName = $rootScope.brand.split('.')[2];
});

这是失败的单元测试:

beforeEach(module('App'));

beforeEach( inject( function( $controller, _$location_, $rootScope) {
    $location = _$location_;
    $scope = $rootScope.$new();
    AppCtrl = $controller( 'AppCtrl', { $location: $location, $scope: $scope });
}));
it('AppCtrl has been initialized', inject( function() {
    expect( AppCtrl ).toBeTruthy();
}));

尝试了这些方面的东西:

it('should set the default category to match the category_id found in location.hash', function() {
    $browser.setUrl('http://server/#/categories/2');
    $browser.poll();
    scope.$eval();
    $browser.xhr.flush();
    expect(ctrl.selectedCategory).toBe('2'); 
}); 

没有帮助。

4

1 回答 1

6

这是您的解决方案https://groups.google.com/d/msg/angular/F0jFWC4G9hI/FNz3oQu0RhYJ

只是让您知道,Igor Minar 和 Vojta Jína 都是 Angular 开发人员,后者是 AngularJs 单元测试背后的主要人员之一,因此请注意他们。

所以,基本上它在测试时已经使用了一个模拟版本的$location服务,你应该能够完美地控制它。

于 2013-10-02T17:44:51.290 回答