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 開発者であり、Vojta Jína は AngularJs ユニット テストの主要人物の 1 人です。

したがって、基本的には、テスト中にサービスの模擬バージョンを既に使用しており、$location完全に制御できるはずです。

于 2013-10-02T17:44:51.290 に答える