【发布时间】:2016-02-15 12:03:55
【问题描述】:
我希望这是一个简单的问题。
我有一个选择框指令,当在指令之外单击任何内容时,它应该关闭。所以窗口有一个事件监听器,一旦听到点击事件就隐藏框-
$window.addEventListener('click', function() {
$scope.expanded = false;
$scope.$apply();
});
效果很好,没有抱怨。但是我正在尝试为此编写一个单元测试,并且即使在 window 本身上也无法弄清楚如何触发点击。
it('should close the dropdown if the window is clicked', function() {
toggleButton.trigger('click');
expect(eleSimpleOptionBox.hasClass('ng-hide')).toBe(false);
$window.trigger('click');
expect(eleSimpleOptionBox.hasClass('ng-hide')).toBe(true);
});
我尝试了以下方法-
$window.trigger('click'); // as well as .click()
$window.triggerHandler('click');
angular.element('body').trigger('click'); // as well as .click()
someWrappingElement.trigger('click'); // as well as .click()
【问题讨论】:
-
你是在你的范围内调用
$digest还是在触发事件后调用$rootScope? -
两者都不是。但在测试中,第一个点击触发器在没有
$digest的情况下工作,所以我假设第二个会。它使用的是 DOM 事件监听器,而不是 angulars 事件监听器。
标签: javascript angularjs unit-testing karma-jasmine