Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 测试角分辨法_Javascript_Angularjs_Angular Ui Router_Jasmine_Karma Jasmine - Fatal编程技术网

Javascript 测试角分辨法

Javascript 测试角分辨法,javascript,angularjs,angular-ui-router,jasmine,karma-jasmine,Javascript,Angularjs,Angular Ui Router,Jasmine,Karma Jasmine,我的ui路由器有Angular,因此toResolve变量将在我的SomeController .state('some.state', { url: '/some', controller: 'SomeController', templateUrl: '/static/views/some-state.html', resolve: { toResolve: function(Resource) { retu

我的ui路由器有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
将是未定义的。

关于相关主题的一篇好文章是,但它不是解决方案。一个想法是将另一个对象传递给解析,然后分别测试代码单元,这在解析一组项目时很好。

使用服务使解析程序能够有效地进行测试(在集成/e2e测试中也可以模拟)

注意:角度服务是单例服务,而状态/路由解析器不是

如果需要缓存解析,解析程序可能会移动到
工厂
服务

app.factory('someResolver', function(Resource) {
  return Resource.get(function(response) {
    return response;
  })
});
...

resolve: { toResolve: 'someResolver' },
另一方面,如果预期在每次路由更改时对解析器进行评估,这可能会导致不良的应用程序行为。在这种情况下,适当的配方可能是
常量
注释函数:

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);

为什么要测试内部AngularJS功能,可能它的工作方式非常完美它不是内部的,而是一个简单的测试用例,比如
expect($scope.toResolve).not.tobeundefine()当我可能错过返回的时间example@KrzysztofSafjanowski:无论如何,一切都必须是可测试的,如果我想,我应该能够模拟任何组件并测试这些组件的任何组合,不管它是内部的还是不好的,这正是我想要的。另一个小问题是:我的规范中的
$injector
从何而来?@mostwaint您需要将
$injector
服务注入规范中,以测试
常量和
$state。获取…
解析程序的味道(对于
工厂
来说不是必需的)。