我无法正确模拟节点className
模块的promises方法。
我的fs
文件调用了真正的appData.ts
方法,而不是我在fs.promises.mkdir
中声明的模拟。
我认为问题是由于模拟方法如何嵌套在导入的模块\__tests__/appData.test.js
中作为fs
而引起的。但是我当然不确定。
我知道我应该可以调试此问题,但是我认为我需要一些经验丰富的人的帮助。
appData.ts
fs.promises.readdir
__ tests __ / appData.js
import * as fs from 'fs'
import { app } from 'electron'
const { readdir, mkdir } = fs.promises
/**
* Initialize app data dir.
* @param {string} path Where to initialize app data dir.
*/
export async function initDir(path: string): Promise<void> {
try {
await readdir(path)
console.log(`app data dir exists at ${path}`)
} catch (error) {
if (error.code === 'ENOENT') {
try {
await mkdir(path)
console.log(`created app data dir at ${path}`)
} catch (error) {
console.error(`could not create app data dir at ${path}`)
console.error(error)
app.quit()
}
} else {
console.error('unable to handle error while initializing app data dir')
console.error(error)
app.quit()
}
}
}
答案 0 :(得分:0)
我发现导致模拟无法正常工作的行。
appData.ts
...
const { readdir, mkdir } = fs.promises
...
这对我来说很有意义。不管我模拟fs.promises
方法是什么,考虑到导入appData.ts
时,fs.promises
都会被分解为\__tests__/appData.test.js
无法接触的变量。
如果我想保持解构,可以在initDir()
内执行。这允许appData.ts
在\__tests__/appData.test.js
运行时访问模拟initDir
。