响应式表单:为什么双向绑定在Jasmine/Karma下的工作方式不同?



通常,Karma会显示测试结果以及您测试的最后一个测试组件。

这个组件的表现几乎完全活跃,但我注意到它不是100%匹配。

我已经创建了一个简单的测试应用程序,有一个表单输入文本:https://stackblitz.com/edit/stackoverflow-q-53122846-szzgrz?file=main.ts

如果取消注释"bootstrapApp"基本上。在Ts文件中,您将看到双向绑定工作:文本输入到它下面的字段自动显示。

但是如果你取消注释&;bootstrapTEsts"(您可能需要重新加载页面来查看差异)您会发现测试失败(span内部的内容没有改变)。

为什么?

该死,我成功了。

我猜少了2件:

首先,我设置表单属性的方式是错误的。而不是:

component.registrationForm.value.playerNick = testVal;

,但有效的是:

component.registrationForm.controls['playerNick'].setValue(testVal);

不知道为什么,但这是不同的。

第二,我想念做

fixture.detectChanges();

在更改表单内容之后和检查更新之前。