gpt4 book ai didi

javascript - Angular - 没有在 'it' 函数的回调中传递 $controller 测试失败,为什么?

转载 作者:行者123 更新时间:2023-11-28 20:52:08 24 4
gpt4 key购买 nike

我是一名测试新手,正在尝试为 Controller 编写一些 Jasmine/Karma 测试。我得到了一个示例测试来使用和构建,在这里,$controller 被传递到 it block 的函数的参数中。这会导致测试顺利通过。

我已经为这个应用程序的其他 Controller 成功编写了测试,但我还没有看到 $controller 在那里传递。所以我试着按照我所知道的去做,但是当我删除 $controller 时,测试失败了,因为它正在寻找依赖项(我应该通过 $provide.valuebeforeEach...?)。

这是 Controller 代码 -

(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 block )-

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

});
});
});

})();

那么为什么当我从 it block 中的函数参数中删除 $controller 时,它会抛出这个错误?

Error: [$injector:unpr] Unknown provider: dogListProvider <- dogList <- EntryAddController

这两个版本的 it block 有什么区别?

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

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

对比

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

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

最佳答案

您可以在 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 函数而不是您的 Controller 。

您应该从函数中删除参数并解决您的Unknown Provider 错误。

关于javascript - Angular - 没有在 'it' 函数的回调中传递 $controller 测试失败,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42385654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com