我有带有 ui-router 的 Angular,所以 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
将是 undefined。
最佳答案
使用服务使解析器可高效测试(并且在集成/e2e 测试中也可模拟)。
注意:Angular 服务是单例,状态/路由解析器不是。
如果需要缓存一个解析,一个解析器可能会被移动到工厂
服务。
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);
关于javascript - 测试 Angular 解析方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37278543/