【发布时间】:2019-01-25 17:36:53
【问题描述】:
我在测试以下课程时遇到了一些问题。
interface Connector {
connect: () => Promise<void>;
}
class Unit {
private connector: Connector;
constructor(connector: Connector) {
this.connector = connector;
}
public attemptConnect(iteration: number, max: number): void {
console.log("attempt" + iteration);
this.connector.connect()
.then(() => {
console.log("connected");
})
.catch((error) => {
if (iteration < max) {
this.attemptConnect(iteration + 1, max);
}
});
}
}
我想测试 Connector.connect() 函数被调用的次数是否正确。 我正在尝试通过以下方式实现这一目标:
describe("Unit", () => {
it("fails to record more than one recursion", async () => {
const connector: Connector = {
connect: jest.fn().mockRejectedValue(new Error("foo")),
};
const unit: Unit = new Unit(connector);
await unit.attemptConnect(1, 4);
expect((connector.connect as jest.Mock).mock.calls.length).toBe(4);
});
});
不幸的是,expect() 调用失败了,说
Error: expect(received).toBe(expected) // Object.is equality
Expected: 4
Received: 1
如果我使用调试器并观察值
(connector.connect as jest.Mock).mock.calls.length
我可以看到通话被正确记录。只有当测试完成时数字是错误的。
感谢您的帮助!
【问题讨论】:
标签: typescript unit-testing mocking jestjs