karma test rootScope。$ on $ locationChangeSuccess

时间:2015-11-17 11:27:42

标签: javascript angularjs karma-jasmine

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

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

我想在业力中测试这个功能。以下是我的想法:

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

我还尝试用 $ emit 替换 $ broadcast ,结果相同,有关这应该如何运作的任何建议吗?

1 个答案:

答案 0 :(得分:1)

你忘记了角度的重要部分 - $digest周期 如果你想进行单元测试是值得记住的,每次你改变一个模型并期望它触发你需要运行的东西$digest当你使用{{1}它时它是一样的在单元测试中测试指令。每当你期望angular自动执行某些操作时,你需要做范围$ digest()或rootScope。$ digest()

$compile

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