我正在尝试为使用simple-git库的NestJS应用程序编写Jest测试。我想模拟simpleGit()
的返回值,这样我就可以在不实际运行Git命令的情况下测试模块的行为。
下面是我的模块中的相关代码:
import simpleGit from 'simple-git';
function myFunction() {
const git = simpleGit();
git.checkout('my-branch');
}
下面是Jest测试规范文件
import myFunction from './my-module';
import simpleGit, { SimpleGit } from 'simple-git';
jest.mock('simple-git', () => {
const mGit = {
init: jest.fn(),
checkout: jest.fn(),
addConfig: jest.fn(),
fetch: jest.fn(),
pull: jest.fn(),
checkIsRepo: jest.fn(),
};
const mSimpleGit = jest.fn(() => mGit);
return {
default: mSimpleGit,
SimpleGit: mSimpleGit,
};
});
describe('myFunction', () => {
it('should call checkout with the correct branch', () => {
myFunction();
expect(simpleGit().checkout).toHaveBeenCalledWith('my-branch');
});
});
这实际上从简单的git而不是我的Mock调用了实际的checkout
函数,但我不确定我做错了什么。如何在Jest测试中正确模拟simple-git
库?
预期的行为应该是测试应该调用模拟的checkout
函数。
1条答案
按热度按时间mum43rcc1#
我们可以使用jest.mock(moduleName,factory,options)和Jest的自动锁定特性来创建模拟对象,而不是指定显式的模块工厂。
例如:
my-module.ts
:my-module.test.ts
:测试结果:
软件包版本: