如何在spyOn中捕获$ broadcast?

时间:2016-04-30 06:20:03

标签: javascript unit-testing jasmine vue.js

我不知道为什么我的测试无效。

it('should be called when "get-tentative-events" is fired', function() {
  spyOn(this.VM, 'addEvents');
  spyOn(this.VM, 'setEventData').and.returnValue(null);

  this.VM.$root.$broadcast('get-tentative-events', []);
  expect(this.VM.addEvents).toBeDefined();
  expect(this.VM.addEvents).toHaveBeenCalled();
});

在调试中,我确认调用了addEvents 但是出现了错误single-calendar addEvents should be called when "get-tentative-events" is fired FAILED

供参考:

如果我改变

this.VM.$root.$broadcast('get-tentative-events', []);

this.VM.addEvents([])

我可以通过这个测试。所以我无法理解为什么我的测试失败了。

1 个答案:

答案 0 :(得分:0)

在监视Vue方法和被触发的事件时,我总是遇到麻烦。您可以尝试使用$nextTick进行异步测试,因为Vue的事件已被解析为异步,但我建议您直接测试您的事件处理程序,并相信Vue的内部事件处理工作正在暗中进行那些。