emo*_*032 5 unit-testing jasmine angular2-changedetection angular
遇到了这个问题并在互联网上搜索了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: 'Roger',
last: 'Moore'
});
};
describe('TestComponent', () => {
'use strict';
let testComponent: TestComponent;
let fixture: ComponentFixture<TestComponent>;
beforeEach(async() => {
TestBed.configureTestingModule({
imports: [ TestComponentModule ]
}).compileComponents();
fixture = TestBed.createComponent(TestComponent);
testComponent = fixture.componentInstance;
fixture.detectChanges();
});
it('should render the app', () => {
expect(TestComponent).toBeDefined();
});
describe('displayData()', () => {
let dataMock = new DataMock;
beforeEach(() => {
testComponent.data = dataMock.data;
});
it('should return fullName', () => {
expect(TestComponent.displayData()).toBe('Roger Moore');
});
});
});
Run Code Online (Sandbox Code Playgroud)
那么,为什么在fixture.detectChanges()工作的每个规范之前实例化类dataMock?这是什么原因?
您必须在执行compileComponents 后创建fixture。
beforeEach(async() => {
TestBed.configureTestingModule({
imports: [ TestComponentModule ]
}).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(TestComponent);
testComponent = fixture.componentInstance;
fixture.detectChanges();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4862 次 |
| 最近记录: |