Jest 无法从 node_modules 找到模块

作者:编程家 分类: typescript 时间:2025-05-10

Jest是一个流行的JavaScript测试框架,它提供了一种简单而强大的方式来编写和运行测试。然而,有时在使用Jest进行测试时,可能会遇到一个常见的问题:无法从node_modules目录中找到模块。本文将介绍这个问题的原因和解决方法,并通过一个案例代码来说明。

## 问题描述

当我们在使用Jest运行测试时,有时会遇到一个错误信息:"Cannot find module 'moduleName' from 'filePath'",其中moduleName是我们引入的模块的名称,filePath是我们测试文件的路径。这个错误通常发生在我们尝试引入来自node_modules目录的第三方模块时。

## 问题原因

这个问题的原因是Jest默认不会从node_modules目录中查找模块。这是因为Jest的设计初衷是专注于测试我们自己编写的代码,而不是第三方库。因此,默认情况下,Jest只会在我们测试文件所在的目录中查找模块。

## 解决方法

要解决这个问题,我们可以通过配置Jest的moduleDirectories选项,告诉Jest去哪些目录中查找模块。我们可以将node_modules目录添加到moduleDirectories选项中,这样Jest就会在node_modules目录中查找模块了。

### 配置方法

在项目的根目录下,找到jest.config.js文件(如果没有则创建一个),然后在文件中添加以下配置:

javascript

module.exports = {

// 其他配置项...

moduleDirectories: ['node_modules'],

};

在这个配置中,我们将node_modules目录添加到了moduleDirectories选项中,这样Jest就会在node_modules目录中查找模块。

### 示例代码

让我们通过一个示例代码来说明如何解决这个问题。假设我们有一个项目,其中的测试文件test.js引入了一个来自node_modules目录的第三方模块lodash:

javascript

// test.js

const _ = require('lodash');

test('example test', () => {

expect(_.add(1, 2)).toBe(3);

});

在默认情况下,当我们运行Jest来运行这个测试文件时,会抛出一个找不到模块的错误。为了解决这个问题,我们可以按照上面的配置方法,在jest.config.js文件中添加moduleDirectories选项:

javascript

// jest.config.js

module.exports = {

// 其他配置项...

moduleDirectories: ['node_modules'],

};

添加了这个配置之后,再次运行Jest,就可以成功找到lodash模块并运行测试了。

##

Jest是一个强大的JavaScript测试框架,但有时会遇到无法从node_modules目录找到模块的问题。通过配置Jest的moduleDirectories选项,我们可以解决这个问题,并成功引入和测试第三方模块。希望本文对你理解和解决这个问题有所帮助!