gpt4 book ai didi

javascript - karma 测试 rootScope.$on $locationChangeSuccess

转载 作者:行者123 更新时间:2023-12-03 08:20:57 26 4
gpt4 key购买 nike

我有一小段代码,只需在 $locationChangeSuccess 上重新加载当前窗口:

$rootScope.$on('$locationChangeSuccess', function(){
self.window.location.reload();
});

我想在 karma 中测试这个功能。这是我认为可行的:

beforeEach(inject(function($rootScope) {
rootScope = $rootScope;
}));


it('should reload the window if the url changes', function() {
spyOn(rootScope, '$on');
rootScope.$broadcast('$locationChangeSuccess');
expect(rootScope.$on).toHaveBeenCalled();
});

我还尝试将 $broadcast 替换为 $emit ,结果相同,对此有何建议?

最佳答案

你忘记了 Angular 的重要部分 - $digest 循环如果您想进行单元测试,那么将来是否值得记住,每次更改模型并期望它触发运行 $digest 所需的内容时,使用 时都是一样的$compile 在单元测试中测试指令。每当您希望 Angular 自动执行某些操作时,您将需要执行scope$digest() 或 rootScope.$digest()

beforeEach(inject(function($rootScope) {
rootScope = $rootScope;
}));


it('should reload the window if the url changes', function() {
spyOn(rootScope, '$on');
rootScope.$broadcast('$locationChangeSuccess');
rootScope.$digest()
expect(rootScope.$on).toHaveBeenCalled();
});

这会起作用,因为摘要周期将处理广播

关于javascript - karma 测试 rootScope.$on $locationChangeSuccess,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33755778/

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