首页 > 解决方案 > detectChanges 重置反应形式。在测试中管理表单值的正确方法是什么?

问题描述

我正在为反应形式编写测试。

app.form.get('name').setValue('new value');
expect(app.form.get('name').value).toEqual('new value');
fixture.detectChanges();
expect(app.form.get('name').value).toEqual('new value'); // <-- Fails.

我调试了它。我看到控制值在之后被重置为默认值detectChanges

有情况

在测试中管理表单值的正确方法是什么?

标签: angulartesting

解决方案


由于这个原因,您的测试可能会失败:

fixture.detectChanges();将执行方法,如果您在该生命周期钩子ngOnInit中实例化值,app.form

然后所有字段将再次获得默认值以及您之前设置的值:

app.form.get('name').setValue('new value');

将被覆盖,然后您的测试expect(app.form.get('name').value).toEqual('new value'); // <-- Fails.将失败。


推荐阅读