在Jest中有没有办法使用类似数组的符号来检查可迭代对象(使用[Symbol.iterator]方法)?
如下所示:
expect(new Matrix).toBe([
[ 1, 0, 0 ],
[ 0, 1, 0 ],
[ 0, 0, 1 ],
])其中Matrix不是数组,但具有[Symbol.iterator]方法:
class Matrix {
public *[Symbol.iterator]() {
yield new Vector(1, 0, 0)
yield new Vector(0, 1, 0)
yield new Vector(0, 0, 1)
}
}在这个例子中,方法应该是递归的,这一点很重要,因为对象的每个(产生的)元素也可能是可迭代的:
class Vector {
private values : number[]
public constructor(values : number[]) {
this.values = values
}
public *[Symbol.iterator]() {
return yield this.values
}
}发布于 2021-04-25 15:58:51
测试可以依赖于可迭代程序在JavaScript中的预期行为方式:
const matrix = new Matrix();
expect(matrix[Symbol.iterator]).toEqual(expect.any(Function));
expect([...matrix]).toEqual([
expect.any(Vector),
expect.any(Vector),
expect.any(Vector),
]);
expect([...matrix].map(row => [...row]).toEqual([
[ 1, 0, 0 ],
[ 0, 1, 0 ],
[ 0, 0, 1 ],
]);或者,可以单独模拟和测试Vector。
https://stackoverflow.com/questions/67249124
复制相似问题