【发布时间】:2016-12-29 10:39:06
【问题描述】:
我有一个包含 1 个子组件的组件。像这样:
<custom-component (customEvent)="foo()"></custom-component>
foo 是一个做事的函数,假设是一个简单的增量。
我想编写一个单元测试,确保在自定义事件发出后,增量确实发生了。
我目前在测试中尝试做的事情是这样的:
let oldValue = component.variableThatShouldBeIncremented;
childComponent.onCustomEvent.emit();
expect(component.variableThatShouldBeIncremented).toBeGreaterThan(oldValue);
这目前不起作用。但是如果我将期望包装在 setTimeout 中,它会这样做。这是有道理的,因为事件是异步的。
我想摆脱 setTimeout。有没有办法告诉“等到事件回调完成”?
我试图寻找示例,但我只找到了检查特定事件是否已发出的测试,而不是检查发出特定事件的结果。
编辑:
我认为 yurzui 的答案是正确的。代码应该可以工作。我通过简化 Q 的代码而犯了一个错误,省略了实际导致问题的代码:foo 函数。
该函数正在从服务中调用一个函数,这不是一个简单的增量。
出于参考目的,我的实际问题是为模拟版本的服务创建的间谍没有在事件处理程序中注册对函数的调用。现在问题解决了
【问题讨论】:
-
为什么写
(customEvent)="foo"而不是(customEvent)="foo()"? -
抱歉,打错了。我已经编辑了问题:)
标签: unit-testing angular jasmine