这里有一点测试新手,我试图为控制器编写一些Jasmine / Karma测试。我得到了一个样本测试来使用和构建,在这里,$controller
在it
块的函数的参数中传递。这导致测试通过。
我已经为这个应用程序成功地为其他控制器编写了测试,但我还没有看到$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();
});
答案 0 :(得分:0)
您可以在it()
声明中为该功能添加的唯一参数是done
(Jasmine Asynchronous Support)
it("should support async execution of test preparation and expectations", function(done) {
value++;
expect(value).toBeGreaterThan(0);
done();
});
您在函数中将其称为$controller
这一事实无关紧要,它实际上是done
函数而不是您的控制器。
您应该从该功能中删除该参数并解决未知提供商错误。