测试Angular组件的问题

时间:2017-10-20 18:58:01

标签: angular testing

我有一个具有以下初始化的组件

ngOnInit() {
    this.transactionForm.get('type').valueChanges.subscribe(transType => {
            if (transType === 'xx') {
                this.transactionForm.patchValue({
                    subTotal: 0
                });
                console.log('done', this.transactionForm.value);
            }
        });
    }

我正在尝试编写以下测试:

it('should ...', () => {
            fixture.detectChanges();
            const expectedSubTotal = 0;
            comp.transactionForm.patchValue({
                type: 'xx',
                subTotal: 42
            });
            fixture.detectChanges();
            console.log('getting');
            const actual = comp.transactionForm.get('subTotal').value; // Does not get 0 - gets 42 instead
            expect(actual).toBe(expectedSubTotal);
        });

console.log都打印正确的值,但我似乎无法通过此测试。我错过了什么?

1 个答案:

答案 0 :(得分:1)

您应该知道订阅者在form.patchValue

期间同步执行
.patchValue({ type: 'xx', subTotal: 42 });
                 (1)         (3)
                  ||
                  \/
                 (2)
    form.get('type').valueChanges.subscribe   

因此要么运行

comp.transactionForm.get('type').updateValueAndValidity();   
修补或重新排序属性后

.patchValue({ subTotal: 42, type: 'xx' });

JavaScript无法保证对象中的属性顺序