Angular - 在'它的回调中没有传递$ controller。功能失败测试,​​为什么?

时间:2017-02-22 07:55:03

标签: javascript angularjs testing jasmine karma-runner

这里有一点测试新手,我试图为控制器编写一些Jasmine / Karma测试。我得到了一个样本测试来使用和构建,在这里,$controllerit块的函数的参数中传递。这导致测试通过。

我已经为这个应用程序成功地为其他控制器编写了测试,但我还没有看到$controller在那里传递过。所以我尝试按照我所知道的那样,但是当我删除$controller时,测试失败了,因为它正在寻找依赖关系(我应该通过$provide.value在{{{ 1} ...?)。

这是控制器代码 -

beforeEach

这是我给出的示例代码(请注意(function() { 'use strict'; angular .module('myApp') .controller('EntryAddController', EntryAddController); function EntryAddController($scope, $state, moment, $sanitize, dogList, catList, months, frequencies, EntryFactory, $modal, toastr, $log) { var vm = this; var now = moment(); var tomorrow = now.add(1, 'days').toDate(); var to = now.subtract(1, 'days').add(12, 'months').toDate(); vm.fromDay = tomorrow; vm.minDay = tomorrow; start(); function start() { //some logic here } })(); 块) -

it

那么为什么当我从(function() { 'use strict'; describe('Entry Add Controller', function(){ describe('EntryAddController', function() { var vm, $rootScope, $controller; beforeEach(module('myApp')); beforeEach(function() { inject(function(_$rootScope_, _$controller_) { $rootScope = _$rootScope_; $controller = _$controller_; }); }); describe('EntryAddController', function() { var $scope; beforeEach(function createChildScopeForTheTest() { $scope = $rootScope.$new(); }); afterEach(function disposeOfCreatedChildScope() { $scope.$destroy(); }); it('expects fromDate and toDate to be defined', function($controller) { vm = $controller('EntryAddController', { $scope: $scope }); expect(vm.fromDay).toBeDefined(); }); }); }); }); })(); 块中的函数的参数中删除$controller时,会抛出此错误?

it

这两个版本的Error: [$injector:unpr] Unknown provider: dogListProvider <- dogList <- EntryAddController 块之间有什么区别?

it

VS

it('expects fromDate and toDate to be defined', function($controller) {
   vm = $controller('EntryAddController', { $scope: $scope });

   expect(vm.fromDay).toBeDefined();
});

1 个答案:

答案 0 :(得分:0)

您可以在it()声明中为该功能添加的唯一参数是doneJasmine Asynchronous Support

it("should support async execution of test preparation and expectations", function(done) {
  value++;
  expect(value).toBeGreaterThan(0);
  done();
});

您在函数中将其称为$controller这一事实无关紧要,它实际上是done函数而不是您的控制器。

您应该从该功能中删除该参数并解决未知提供商错误。