【发布时间】:2013-04-06 02:05:28
【问题描述】:
正如我们在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”配置是使用单个函数 function($routeProvider) 完成的,我们应该能够在不涉及浏览器的情况下进行单元测试,因为我认为路由功能不需要浏览器 DOM。
例如,
当 url 为 /foo 时,templateUrl 必须为 /partials/foo.html 且控制器为 FooCtrl
当 url 为 /bar 时,templateUrl 必须为 /partials/bar.html 且控制器为 BarCtrl
它是一个简单的函数IMO,它也应该在一个简单的测试,一个单元测试中进行测试。
我用谷歌搜索并搜索了这个 $routeProvider 单元测试,但还没有运气。
我想我可能会从这里借一些代码,但还不能做到,https://github.com/angular/angular.js/blob/master/test/ng/routeSpec.js。
【问题讨论】:
-
两者都不够好?
-
但是,人们不得不怀疑这是否会产生一个提供实际价值的单元测试;大多数路由配置就是这样,配置和单元测试可以归结为“/some/route 是否等于 /some/route?”
-
@fwielstra,是的,这种测试感觉就像double entry。再说一次,我发现大多数测试都有这种感觉。另一方面,我发现复式输入很有用。
-
这里的答案对我有用。模拟 $httpBackend stackoverflow.com/questions/17963717/…
标签: angularjs unit-testing jasmine angularjs-routing