我建立了一个使用node-glob搜索文件的模块。
fileCollector.js
const glob = require('glob');
exports.getFiles = (directory) => {
return {
freeMarker: glob.sync(directory + '/**/*.ftl'),
sass: glob.sync(directory + '/**/*.scss')
};
};
我正在尝试编写测试,以便验证以下内容—选中标记指示已完成。
getFiles
的返回值正确 fileCollector.test.js
const glob = require('glob');
const fileCollector = require('fileCollector');
jest.mock('glob');
describe('getFiles', () => {
it('should get files', () => {
const files = fileCollector.getFiles('/path/to/files');
expect(glob.sync.mock.calls).toEqual([['/path/to/files/**/*.ftl'], ['/path/to/files/**/*.scss']]);
expect(files).toEqual({
freeMarker: 'INSERT_MOCKED_VALUE_FROM_GLOB',
sass: 'INSERT_MOCKED_VALUE_FROM_GLOB'
});
});
});
如何使用两个单独的返回值模拟两次glob的返回值,以便可以测试getFiles
的返回值?
注意: Jest mock module multiple times with different values不能回答我的问题,因为它在单独的测试中一次模拟了另一个值。
答案 0 :(得分:0)
两次使用mockReturnValueOnce
函数。例如:
glob.sync
.mockReturnValueOnce(['path/to/file.ftl'])
.mockReturnValueOnce(['path/to/file.sass']);
完整示例:
fileCollector.test.js
const glob = require('glob');
const fileCollector = require('fileCollector');
jest.mock('glob');
describe('getFiles', () => {
it('should get files', () => {
glob.sync
.mockReturnValueOnce(['path/to/file.ftl'])
.mockReturnValueOnce(['path/to/file.sass']);
const files = fileCollector.getFiles('/path/to/files');
expect(glob.sync.mock.calls).toEqual([['/path/to/files/**/*.ftl'], ['/path/to/files/**/*.scss']]);
expect(files).toEqual({
freeMarker: ['path/to/file.ftl'],
sass: ['path/to/file.sass']
});
});
});