测试角度解析方法
Test Angular resolve method
我有Angular和ui路由器,所以toResolve
变量将在我的SomeController
中解析
.state('some.state', {
url: '/some',
controller: 'SomeController',
templateUrl: '/static/views/some-state.html',
resolve: {
toResolve: function(Resource) {
return Resource.get(function(response) {
return response;
});
},
但是如何用Jasmine测试这个功能呢?假设我忘记了return
语句,因此我的作用域中的toResolve
将是未定义的。
使用服务使解析器可以有效地进行测试(在集成/e2e测试中也可以进行模拟)。
注意:角度服务是singleton,状态/路由解析器不是
如果期望缓存解析,则可以将解析程序移动到factory
服务。
app.factory('someResolver', function(Resource) {
return Resource.get(function(response) {
return response;
})
});
...
resolve: { toResolve: 'someResolver' },
另一方面,如果每次更改路由都要评估解析器,这可能会导致不希望的应用程序行为。在这种情况下,合适的配方可能是constant
注释函数:
app.constant('someResolver', ['Resource', function(Resource) {
return Resource.get(function(response) {
return response;
})
}]);
app.config(function (someResolver, ...) {
...
resolve: { toResolve: someResolver },
...
否则,规格可能会被一堆样板代码所拖累:
var toResolveFactory = $state.get('some.state').resolve.toResolve;
var toResolve = $injector.invoke(toResolveFactory);
关于相关主题的一篇好文章是http://nikas.praninskas.com/angular/2014/09/27/unit-testing-ui-router-configuration/,但这不是解决方案。一种想法是将另一个对象传递给resolve
,然后单独测试该代码单元,这在解决一堆项目时很好。
相关文章:
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 测试角度解析方法
- 如何在ember单元测试中模拟_super()方法
- Jasmine单元测试在监视服务方法时失败
- jQuery-有没有一种方法可以测试函数是否异步
- 在另一个项目中使用大理石测试rxjs5方法
- 用jasmine测试JavaScriptUI的最佳方法
- 如何测试只在闭包范围中可见的javascript方法
- 如何用mocha和rewire模拟node.js单元测试中的Q方法
- 在JavaScript / jQuery中,是否有一种更短的方法可以编写在同一个测试变量上具有许多OR的“if”语句
- 测试React组件内部的fetch()方法
- 为什么不'我的角度测试$scope上定义了方法
- 测试变量是否为数组的最佳方法
- Sinon-带有回调的存根函数-导致测试方法超时
- 控制台.log在Karma AngularJS方法测试中
- JQuery 插件错误:对象 [对象对象] 没有方法“测试”
- jQuery GET 方法测试执行
- regex没有方法测试
- Javascript切片方法测试问题
- 基于HTML5 dom方法测试功能