gpt4 book ai didi

angularjs - 如何在 AngularJS Karma 单元测试中触发 `$on` 事件?

转载 作者:行者123 更新时间:2023-12-04 13:32:03 26 4
gpt4 key购买 nike

我正在尝试触发 $scope.$on()当我 $rootScope.broadcast() 时触发的 Controller 中的方法一个事件。我发现这个问题很有用:How can I test events in angular? ,但我仍然无法检测到从 $rootScope 广播的事件通过 Controller 的$scope .

到目前为止,我已经成功测试了 $broadcast在相应的 $rootScope 上调用方法,但不是 $on在相应的 $scope 上调用了方法当$broadcast$rootScope 上调用.

我试图 $rootScope.$broadcast直接在我的测试中,但我的 spy 没有注意到这个事件。

这是我的 Controller :

angular.module('app.admin.controllers.notes', [])
.controller('NotesCtrl', function($scope) {

$scope.$on('resource-loaded', function(event, resource) { // I want to test this
$scope.parentType = resource.type;
$scope.parentId = resource.id;
});

});

这是我的测试:
describe('The notes controller', function() {

beforeEach(module('app.admin.controllers.notes'));

var scope, rootScope, NotesCtrl;

beforeEach(inject(function($controller, $injector, $rootScope) {
rootScope = $rootScope;
scope = $rootScope.$new(); // I've tried this with and without $new()
NotesCtrl = $controller('NotesCtrl', {$scope: scope}); // I've tried explicitly defining $rootScope here
}));

it('should respond to the `resource-loaded` event', function() {
spyOn(scope, '$on');
rootScope.$broadcast('resource-loaded'); // This is what I expect to trigger the `$on` method
expect(scope.$on).toHaveBeenCalled();
});

});

here's the plunkr .我已经包含了 $broadcast 的通过测试方法供引用,主要是因为我以相同的方式设置测试。

我已经阅读了很多与 AngularJS 中的测试事件有关的问题,这似乎总是一个范围界定问题。我听说在 Karma 单元测试中, $rootScope$scope是一回事,但我不确定这意味着什么。我试过定义 $rootScope$scope作为同一个对象,以及显式注入(inject) $rootScope进入 NotesCtrl在测试期间,但没有什么能让我的测试变绿。

我怎样才能得到 $on我的 NotesCtrl 中的方法为这个测试开枪?

最佳答案

导致它不起作用的原因是您正在监视 $on功能。不说它时它工作正常:http://plnkr.co/edit/hNEj7MmDDKJcJ7b298OB?p=info .而原因其实很简单。广播事件时,调用的不是$on()功能。调用的是作为参数传递给 $on() 的回调函数。以前:听众。

请注意,通过监视 $on 函数,您不是在这里测试您的代码。您要测试的只是在广播事件时,子作用域会接收它。因此,您正在测试 AngularJS 本身。

关于angularjs - 如何在 AngularJS Karma 单元测试中触发 `$on` 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26537805/

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