您如何对 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});
});
})
如果重复调用不是唯一的,这将失败。
我的应用程序中有代码调用了 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});
});
})
如果重复调用不是唯一的,这将失败。