无法在Jest测试中使用 meta模拟实用程序函数读取文件

nbysray5  于 2023-06-04  发布在  Jest
关注(0)|答案(1)|浏览(309)

我正在使用import. meta阅读一个文件来解析目录,当试图在函数中模拟它时失败了。下面是我想模拟的代码部分

// readFileUtil
                  const __filename = fileURLToPath(import.meta.url);
                  const __dirname = path.dirname(__filename);
                  
                  export async function readFile(fileName: string){
                      try {
                       const data = await fs.promises.readFile(fileName, 'utf8')
                       return data
                      } catch (err) {
                        console.log(err);
                      }
                   }

然后我使用上面的代码来读取这样的文件:

import readFileUtils from '../file-utils'
                import  dataProcessor from '../data/processor 
                
                function processData(fileName:string){
                   const data = await fs.promises.readFile(fileName, 'utf8')
                   //rest of code uses data
                }

然后,我编写了一个Jest测试,它测试processData函数,如下所示

import readFileUtils from '../file-utils'
                import  dataProcessor from '../data/processor 
                
                jest.mock('../file-utils)' 
                describe('Data Processing suite' () => {
                    const fileName = 'resources/data.xml
                    processData(fileName) 
                }

我得到以下错误

只有当'--module'选项为'es 2020','es 2022'... etc时,才允许使用'import. meta'元属性

我不知道如何解决这个问题。我做了很多网上搜索,但我尝试的一切都不起作用。我做了以下操作:

{
              "compilerOptions": {
                 "target": "esnext",
                 "module": "esnext",
               ...

我还安装了'npm install ts-jest-mock-import- meta',但这些解决方案都不起作用
请帮帮忙

9vw9lbht

9vw9lbht1#

我可以解决import. meta错误问题。通过做以下事情。
首先,我安装了以下

npm install @babel/preset-typescript --save-dev

接下来,我创建了一个文件,babel.config.js,并添加了以下代码;

module.exports = {
             presets: [
                ["@babel/preset-env", { targets: { node: "current" } }],
                 "@babel/preset-typescript",
              ],
         };

我仍然无法让文件阅读函数的模拟工作。

相关问题