我想用memfs
package测试以下函数
import fs from 'fs-extra'
import path from 'path'
async function ensureParent(filepath: string) {
const absolutePath = path.resolve(filepath)
const parentDir = path.dirname(absolutePath)
const exists = await fs.pathExists(parentDir)
return exists
}
export default {
ensureParent,
}
为了使用位于项目根目录的内存文件系统测试它,可以使用以下__mocks__/fs.ts
文件
import { fs } from 'memfs'
export default fs
和以下__mocks__/fs/promises.ts
文件
import { fs } from 'memfs'
export default fs.promises
下面是测试文件file.test.ts
import { describe, it, expect, vi, beforeAll, beforeEach } from 'vitest'
import { vol } from 'memfs'
import f from '../file'
vi.mock('fs')
vi.mock('fs/promises')
const fileSystem = {
'./exists/shiman.txt': 'Hello shiman',
}
beforeAll(() => {
vol.fromJSON(fileSystem, '/tmp')
})
beforeEach(() => {
vol.reset()
})
describe.concurrent('file utils', () => {
it('ensure a directory exists', async () => {
expect(await f.ensureParent('/tmp/exists/shiman.txt')).toBe(true)
})
})
然而,测试一直失败,我意识到,尽管考虑了mock,但内存中的文件系统并没有,因为await fs.readdir('/', (err, data) => console.log(err, data))
在我的机器中记录了/
的内容。
我做错什么了吗?
1条答案
按热度按时间qlfbtfca1#
如果其他人偶然发现了这一点,这就是我的工作(在
vitest
中用memfs
模拟fs/promises
):__mocks__
中没有文件。