我有一个呈现标签和输入的组件
在$ postLink上,我将Overver添加到我的输入焦点,如果焦点事件被触发,我将内部变量focused
设置为true
$postLink() {
Rx.Observable.fromEvent(myInputElement, 'focus')
.debounceTime(200)
.subscribe(() => {
this.focused = true;
this.$scope.$evalAsync();
});
}
在我的测试文件中(我使用的是Jasmine),我有类似的东西:
it('must set "focused" to true when input get focused', () => {
// The setupTemplate return a angular.element input, my component controller and scope
const { input, controller, parentScope } = setupTemplate();
input[0].dispatchEvent(new Event('focus'));
$timeout.flush(600);
parentScope.$digest();
expect(controller.focused).toBe(true);
});
但是我的测试失败了。
如果我从我的组件方法中删除debounceTime
,则测试通过。
我可以做些什么来模拟debounceTime
?
答案 0 :(得分:0)
感谢@martin,我的测试是绿色的。
我刚刚在回调中添加了完成,并在 setTimeout
中调用it('must set "focused" to true when input get focused', (done) => {
const { input, controller, parentScope } = setupTemplate();
input[0].dispatchEvent(new Event('focus'));
setTimeout(() => {
expect(controller.focused).toBe(true);
done();
}, 300);
});