正如我们在
http://docs.angularjs.org/tutorial/step_07看到的,
angular.module('phonecat',[]). config(['$routeProvider',function($routeProvider) { $routeProvider. when('/phones',{templateUrl: 'partials/phone-list.html',controller: PhoneListCtrl}). when('/phones/:phoneId',{templateUrl: 'partials/phone-detail.html',controller: PhoneDetailCtrl}). otherwise({redirectTo: '/phones'}); }]);
路由测试建议用e2e测试,
it('should redirect index.html to index.html#/phones',function() { browser().navigateTo('../../app/index.html'); expect(browser().location().url()).toBe('/phones'); });
然而,我认为’$ routeProvider’配置是完成与一个单一的函数,函数($ routeProvider),我们应该能够单位测试而不涉及浏览器,因为我认为路由功能不需要浏览器DOM。
例如,
当url是/ foo时,templateUrl必须是/partials/foo.html,而controller是FooCtrl
当url是/ bar时,templateUrl必须是/partials/bar.html,控制器是BarCtrl
它是一个简单的功能IMO,它也应该在一个简单的测试,一个单元测试。
我googled并搜索这个$ routeProvider单元测试,但没有运气。
我想我可以从这里借一些代码,但还不能做到,https://github.com/angular/angular.js/blob/master/test/ng/routeSpec.js。
为什么不只是断言路由对象配置正确?
it('should map routes to controllers',function() { module('phonecat'); inject(function($route) { expect($route.routes['/phones'].controller).toBe('PhoneListCtrl'); expect($route.routes['/phones'].templateUrl). toEqual('partials/phone-list.html'); expect($route.routes['/phones/:phoneId'].templateUrl). toEqual('partials/phone-detail.html'); expect($route.routes['/phones/:phoneId'].controller). toEqual('PhoneDetailCtrl'); // otherwise redirect to expect($route.routes[null].redirectTo).toEqual('/phones') }); });