您如何对 Jasmine/Jest 中的独特方法调用进行单元测试?

How do you unit test unique method calls in Jasmine/Jest?

我的应用程序中有代码调用了 n 次某个函数(让我们调用此函数 foo)。运行时期望 foo 的每次调用都是 unique(使用一组唯一的参数调用)。由于使用同一组参数多次调用 foo,我的应用程序中最近出现了一个错误清单。

我想写一个测试用例,我可以断言 foo 被一组特定的参数唯一调用过一次,但我不知道如何在 Jasmine/Jest 中这样做.

我知道 Jasmine 有 toHaveBeenCalledOnceWith 匹配器,但它断言 foo 被调用“恰好一次,并且与特定参数完全相同”,这不是我在这种情况下要找的.

您可以结合使用 toHaveBeenCalledWith()toHaveBeenCalledTimes() 来获得您想要的行为,您只需要拥有与您预期的调用次数一样多的 toHaveBeenCalledWith()

例如:

describe("test", () => {
  it("should call not more than unique", () => {
     spyOn(callsFoo, 'foo');
     callsFoo.somethingThatCallsFoo();
     expect(callsFoo.foo).toHaveBeenCalledTimes(2);
     expect(callsFoo.foo).toHaveBeenCalledWith({...someArgs});
     expect(callsFoo.foo).toHaveBeenCalledWith({...otherUnique});
  });
})

如果重复调用不是唯一的,这将失败。