Rstest 基于 tinyspy 提供了一些工具方法帮助你进行函数的模拟(mock)。
rs.fnexport interface Mock<T extends Function> extends MockInstance<T> {
(...args: Parameters<T>): ReturnType<T>;
}
export type MockFn = <T extends Function>(fn?: T) => Mock<T>;创建一个 mock 函数。
const sayHi = rstest.fn((name: string) => `hi ${name}`);
const res = sayHi('bob');
expect(res).toBe('hi bob');
expect(sayHi).toHaveBeenCalledTimes(1);rs.spyOnexport type SpyFn = (
obj: Record<string, any>,
methodName: string,
accessType?: 'get' | 'set',
) => MockInstance;对一个对象的方法进行 mock。
const sayHi = () => 'hi';
const hi = {
sayHi,
};
const spy = rstest.spyOn(hi, 'sayHi');
expect(hi.sayHi()).toBe('hi');
expect(spy).toHaveBeenCalled();rs.isMockFunction(fn: any) => fn is MockInstance判断给定的函数是否为 mock 函数。
rs.clearAllMocks() => Rstest清除所有 mock 的 mock.calls、mock.instances、mock.contexts 和 mock.results 属性。
rs.resetAllMocks() => Rstest清除所有 mock 属性,并将每个 mock 的实现重置为其原始实现。
rs.restoreAllMocks() => Rstest重置所有 mock,并恢复被 mock 的对象的原始描述符。