2014-10-08 76 views
6

ngTableParams我一直在使用NG表创建的应用程序,该应用程序是workign正常,但当我写了一个茉莉花测试情况下,我得到。AngularJS - 嘲讽茉莉测试用例

Error: [$injector:unpr] Unknown provider: TableParamsProvider 

谁能告诉我如何嘲笑ngTableParams并测试其功能

我的代码如下

茉莉测试用例

describe('Testing Controllers', function() { 
    describe('Testing WorkController Controller', function() { 
     var WorkController, $scope; 

     beforeEach(module('wsd.workstations')); 

     beforeEach(inject(function($controller, $rootScope) { 
      $scope = $rootScope.$new(); 
      WorkController = $controller('WorkController', { 
       $rootScope: $rootScope, 
       $scope: $scope 
      }); 
     })); 

     it('should searchDocuments when searchDocuments() is called', function() { 
      $scope.searchDocuments(); 
     }); 
    }); 
}); 

脚本给出

angular.module('wsd', ['restangular', 'ngTable', 'wsd.models', 'wsd.workstations', 'wsd.workperiods', 'ngRoute']) 

.config(function(RestangularProvider, $routeProvider) { 
    RestangularProvider.setBaseUrl('/rest/myuser'); 

    $routeProvider.when('/wd', { 
     templateUrl: 'main/workstation/main.tpl.html', 
     controller: 'WorkController', 
     resolve: { 
      myWorkDocuments: function(Documents) { 
       return Documents.getWorkDocuments(); 
      } 
     } 
    }).when('/wp', { 
     templateUrl: 'main/workperiod/main.tpl.html', 
     controller: 'PeriodController', 
     resolve: { 
      myWorkPeriods: function(Periods) { 
       return Periods.getWorkPeriods(); 
      } 
     } 
    }).otherwise({ 
     redirectTo: '/wd' 
    }); 
}); 

工作站/ main.js

angular.module('wsd.workstations', []) 

.controller('WorkController', function($rootScope, $scope, $filter, ngTableParams) 
{ 
    $scope.myValues = [{name: "Moroni", age: 50}, 
       {name: "Tiancum", age: 43}, 
       {name: "Jacob", age: 27}, 
       {name: "Nephi", age: 29}, 
       {name: "Enos", age: 34}, 
       {name: "Tiancum", age: 43}, 
       {name: "Jacob", age: 27}, 
       {name: "Nephi", age: 29}, 
       {name: "Enos", age: 34}, 
       {name: "Tiancum", age: 43}, 
       {name: "Jacob", age: 27}, 
       {name: "Nephi", age: 29}, 
       {name: "Enos", age: 34}, 
       {name: "Tiancum", age: 43}, 
       {name: "Jacob", age: 27}, 
       {name: "Nephi", age: 29}, 
       {name: "Enos", age: 34}]; 

    $scope.tableParams = new ngTableParams({ 
     sorting: { 
      name: 'asc'  
     } 
    }, { 
     getData: function($defer, params) { 
      $scope.myValues = $filter('orderBy')($scope.myValues, params.orderBy()); 
      $defer.resolve($scope.myValues); 
     } 
    }); 


    $scope.searchDocuments = function() 
    { 
     // some other logic 
    }; 
}); 

回答

2

首先实例,请确保您的应用程序依赖于ngTable。它在'主'内吗?

现在的测试:

beforeEach(inject(function($controller, $rootScope, $filter, ngTableParams) { 
    $scope = $rootScope.$new(); 
    WorkController = $controller('WorkController', { 
     $rootScope: $rootScope, 
     $scope: $scope, 
     $filter: $filter, 
     ngTableParams: ngTableParams 
    }); 
})); 

注意你必须明确如何提供每个依赖作为喷油器的参数。

编辑:igorzg解决方案将工作太多,如果你不想与测试$ scope.tableParams

另一个编辑相关的事情:你需要让角知道如何注入到你的控制器:

.controller('WorkController', ['$rootScope', '$scope', '$filter', 'ngTableParams', function($rootScope, $scope, $filter, ngTableParams) 
{ 
// your controller code here 
}]); 

另一个问题是,在测试你加载wsd.workstations模块,已经ngTable注入。所以,你需要:

angular.module('wsd.workstations', ['ngTable']) 

在您的测试OR:中

beforeEach(module('wsd')); 

代替:

beforeEach(module('wsd.workstations')); 
+0

没有一分钟的变化....实际上ng-table是在main.js中定义的...............我们是那个孩子,我已经添加了ng路由和完整的脚本 – 2014-10-10 13:23:02

+0

也不仅嘲笑我想测试的ASC功能 – 2014-10-10 13:37:38

+0

我编辑了答案。你的意思是'asc功能'? – kihu 2014-10-10 13:45:50

1

只是嘲笑它,而你创建控制器

function MyNgTableParamsMock() { 

    } 
    beforeEach(inject(function($controller, $rootScope, $filter) { 
     $scope = $rootScope.$new(); 
     WorkController = $controller('WorkController', { 
      $rootScope: $rootScope, 
      $scope: $scope, 
      $filter: $filter, 
      ngTableParams: MyNgTableParamsMock 
     }); 
    })); 
+0

我得到的ReferenceError:可以'找不到变量:$过滤 – 2014-10-10 13:06:59

+0

$过滤器应该始终存在,因为它的角度api的一部分,使其可行,你可以删除过滤器注入和模拟过滤器与一些空功能,但过滤器应始终注射。你能粘贴你的代码吗? – igorzg 2014-10-15 12:17:53