gpt4 book ai didi

angularjs - $broadcast toHaveBeenCalled 失败后 spy $scope.$on

转载 作者:行者123 更新时间:2023-12-02 11:29:21 24 4
gpt4 key购买 nike

我在进行这个简单的测试时遇到了很多麻烦。

我在想要测试的 Controller 中有一个 $scope.$on 监听器。我只是想确保它在广播事件之后被调用。

为此,我认为以下代码可以工作:

describe("Testing the parent controller: ", function() {
var scope, ctrl;

beforeEach(function() {
module("myApp");

inject(function($rootScope, $controller) {
scope = $rootScope.$new();

ctrl = $controller('parent-ctrl', {
$scope: scope,
});
});
});


it ("should trigger broadcast when current page updates", function() {
spyOn(scope, "$on");
scope.$broadcast("myEvent", 999);
expect(scope.$on).toHaveBeenCalled();
});
});

事实并非如此(预期 spy $on 已被调用。)。我研究了很多例子:

并且学到了很多东西,但由于某种原因我只是没有建立一些重要的联系。

我注意到 $on 处理程序确实响应断言后,这是没有帮助的。我已经在各种配置中尝试了 scope.$apply().andCallThrough() 但似乎没有任何效果。

这是如何完成的?

最佳答案

广播事件时,执行的是在 $on 中注册的监听器函数,而不是 $on 函数本身。

您当前的测试适用于这样的代码,但这可能不是您所拥有的:

$scope.$on('myEvent', function () {
$scope.$on('whatever', someFn);
});

您应该测试的是您注册的监听器函数正在执行的操作。

因此,如果您有:

$scope.$on('myEvent', function() {
myFactory.doSomething();
});

像这样测试:

spyOn(myFactory, "doSomething");
scope.$broadcast("myEvent");

expect(myFactory.doSomething).toHaveBeenCalled();

关于angularjs - $broadcast toHaveBeenCalled 失败后 spy $scope.$on,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25337029/

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