javascript - 测试 Angular 解析方法

标签 javascript angularjs angular-ui-router jasmine karma-jasmine

我有带有 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/

相关文章:

angularjs - ionic 标签和侧边菜单历史记录

javascript - 尝试在 jquery 中为我的对象设置动画时出现问题

javascript - 为什么 mime 类型通常设置不正确?

javascript - HTML表单本地存储

javascript - 根据不同型号选择 Angular

javascript - 固定 div 的宽度,即使数据很小

angularjs - Angular http 拦截器

javascript - 验证 AngularJS 状态更改时的登录效果不佳

javascript - 开 Jest : Vue Component can't find mocked function

angularjs - 禁止在查询参数更改时重新加载基于 ui-router 的 View