小编emo*_*032的帖子

Angular 4 + Jasmine单元测试:在更改@Input()变量时,fixture.detectChanges()可能无效的原因

遇到了这个问题并在互联网上搜索了fixture.detectChanges(),当显式插入模拟数据时,它无法识别@Input()中的变化.有大量的线程和文档描述了设置,但不一定是为什么它会导致我的所有测试都破坏.

错误:ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后已更改.

删除fixture.detectChanges()似乎"解决"了这个错误.但是现在没有检测到任何新模拟数据(按规格)的插入.

例:

TestComponent.ts

import { TestComponent } from './test-component';
import { TestComponentModule } from './test-component.module';
import { Data } from './interfaces/data';

export class TestComponent {
    @Input() data: Data;

    displayData(){ 
        let firstName = data.first;
        let lastName = data.last;
        let fullName = firstName + ' ' + lastName;
        return fullName;
    };
}
Run Code Online (Sandbox Code Playgroud)

TestComponent.spec.ts

import { ComponentFixture, TestBed } from '@angular/core/testing';
import { TestComponent } from './test-component';
import { TestComponentModule } from './test-component.module';

class DataMock {
    data: Data = getDataMock({
        first: …
Run Code Online (Sandbox Code Playgroud)

unit-testing jasmine angular2-changedetection angular

5
推荐指数
1
解决办法
4862
查看次数