如何在开玩笑中嘲笑 fs.readdir node.js
How to mock fs.readdir in jest node.js
在我的 node.js 应用程序中,我编写了使用 await fs.readdir 从目录中读取文件的代码。当我尝试使用 jest 测试代码时,我无法模拟 readdir 函数。我附上代码。
const util = require('util');
const readdir = util.promisify(fs.readdir);
async function test(){
const files = await readdir("directory path")
return 'success'
}
如何使用 jest 模拟 readdir
我试过下面的代码,它似乎不起作用
it('test read', async() => {
jest.spyOn(util, 'promisify').mockReturnValueOnce(fs.readdir);
await readdir.mockReturnValueOnce(files);
await expect(await Files.test()).toEqual("success");
})
我收到这个错误,ENOENT:没有这样的文件或目录,scandir ''。如何解决这个问题?有什么想法吗?
您可以使用 fs/promises
模块,因此您不需要承诺 fs
函数
// readdir.js
const fs = require('fs/promises');
async function load(directoryPath) {
const files = await fs.readdir(directoryPath);
return 'success';
}
module.exports = { load };
注意jest.mock
指令:
// readdir.test.js
const { load } = require('./readdir');
const fs = require('fs/promises');
jest.mock('fs/promises', () => ({
readdir: jest.fn(),
}));
it('calls fs.readdir function with the correct argument', async () => {
fs.readdir.mockResolvedValue();
await load('my-path');
expect(fs.readdir).toHaveBeenCalledWith('my-path');
});
it('returns correct result', async () => {
fs.readdir.mockResolvedValue();
const result = await load('x');
expect(result).toEqual('success');
});
它 运行 在我的本地机器上是正确的,所以如果它不 运行 在那里,可能是配置问题,而不是模拟 fs
模块的真正问题
在我的 node.js 应用程序中,我编写了使用 await fs.readdir 从目录中读取文件的代码。当我尝试使用 jest 测试代码时,我无法模拟 readdir 函数。我附上代码。
const util = require('util');
const readdir = util.promisify(fs.readdir);
async function test(){
const files = await readdir("directory path")
return 'success'
}
如何使用 jest 模拟 readdir
我试过下面的代码,它似乎不起作用
it('test read', async() => {
jest.spyOn(util, 'promisify').mockReturnValueOnce(fs.readdir);
await readdir.mockReturnValueOnce(files);
await expect(await Files.test()).toEqual("success");
})
我收到这个错误,ENOENT:没有这样的文件或目录,scandir ''。如何解决这个问题?有什么想法吗?
您可以使用 fs/promises
模块,因此您不需要承诺 fs
函数
// readdir.js
const fs = require('fs/promises');
async function load(directoryPath) {
const files = await fs.readdir(directoryPath);
return 'success';
}
module.exports = { load };
注意jest.mock
指令:
// readdir.test.js
const { load } = require('./readdir');
const fs = require('fs/promises');
jest.mock('fs/promises', () => ({
readdir: jest.fn(),
}));
it('calls fs.readdir function with the correct argument', async () => {
fs.readdir.mockResolvedValue();
await load('my-path');
expect(fs.readdir).toHaveBeenCalledWith('my-path');
});
it('returns correct result', async () => {
fs.readdir.mockResolvedValue();
const result = await load('x');
expect(result).toEqual('success');
});
它 运行 在我的本地机器上是正确的,所以如果它不 运行 在那里,可能是配置问题,而不是模拟 fs
模块的真正问题