【发布时间】:2021-08-28 04:51:59
【问题描述】:
我很清楚 toBe 和 toEqual 在测试中的区别,所以我认为我的设置会顺利运行,但由于“类型问题”仍然失败.这种简化的设置仍然存在问题:
我的组件看起来像(摘录):
let testVar: Employee[] = [];
...
convertEmpArr(input) {
const employeeUpd: Employee[] = [];
employeeUpd.push(new Employee(9999, 'Boss'));
for (const item of input) {
employeeUpd.push(new Employee(item.id, item.name));
}
this.testVar = employeeUpd;
}
当员工是这样构建时:
export class Employee {
constructor(public id: number, public name: string) {
}
}
所以我想检查更新后的数据是否有额外的行 AND 正确的数据。我正在使用模拟数据集:
it('convertEmpArr - should add Boss and other Employees dynamically', () => {
const mockEmpIn: Employee[] = [
{id: 0, name: "Smith"}
];
const mockEmpOut: Employee[] = [
{id: 9999, name: "Boss"},
{id: 0, name: "Smith"}
];
component.convertEmpArr(mockEmpIn);
expect(component.testVar).toEqual(mockEmpOut);
expect(component.testVar.length).toBe(2);
});
第二个期望工作正常,但第一个期望失败:
Expected $[0] to be a kind of Object, but was Employee({ id: 9999, name: 'Boss' }).
Expected $[1] to be a kind of Object, but was Employee({ id: 0, name: 'Smith' }).
我认为使用 toEqual 正是为了这个用例。使用类似的东西会起作用,但我仍然想知道为什么我的测试在 原始设置 下失败 - 我希望有人可以填写:
expect(JSON.stringify(component.testVar)).toEqual(JSON.stringify(mockEmpIn));
【问题讨论】:
标签: angular unit-testing jasmine