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

时间:2019-05-24 01:27:24

标签: angular testing

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

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

之后,控制值已重置为默认值

There is the case

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

1 个答案:

答案 0 :(得分:0)

您写的测试可能会由于以下原因而失败:

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

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

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

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