我正在用Jasmine和Karma学习单元测试。我的测试用例是通过了,但我不明白一件事。这是我的排版稿。
// array list of objects where each month will have one object i.e. 12 objects (Jan to Dec)
monthsData: Array<{
monthName: string;
monthYear: number;
isInRange: boolean;
isLowerEdge: boolean;
isUpperEdge: boolean;
}>;
rangeState: { edge1Exists: boolean; edge2Exists: boolean; edgeIndexes: Array<number> };
initRangeState() {} <---- method which should be called; Not important for this question
这是我的测试用例的规范文件。
it('should re-initialize range state when reflection is triggered', () => {
fixture.detectChanges(); <--- why this is required ?
const rangeState = { edge1Exists: true, edge2Exists: true, edgeIndexes: [] };
const monthsData = {
monthName: 'Jan',
monthYear: 2020,
isInRange: true,
isLowerEdge: true,
isUpperEdge: false
};
fixture.componentInstance.rangeState = rangeState;
fixture.componentInstance.monthsData[0] = monthsData;
...
expect(fixture.componentInstance.initRangeState).toHaveBeenCalled();
});
我不明白的是,当我通过dummy的时候 rangeState
和 monthsData
已经。那我为什么要跑 fixture.detectChanges()
排在第一位。我的测试用例没有调用就失败了。请告诉我背后的原因。我相信一定有我不知道的原因。fixture.detectChanges()
被删除。
从 https:/angular.ioguidetesting。:
您必须通过调用 fixture.detectChanges() 告诉 TestBed 执行数据绑定。
[...]
延迟变化检测是有意的和有用的。它让测试人员有机会在Angular启动数据绑定和调用生命周期钩子之前检查和改变组件的状态。