直接导入默认导出的函数或类并用 expect 断言其行为,需确保导入语法与 export default 匹配,且测试环境支持 es 模块;node.js 14+ 和 vitest 原生支持,jest 需配置 "type": "module" 或 babel;命名导出须用 { } 解构导入,不可混用;mock 可隔离副作用依赖。

直接导入默认导出的函数或类,然后用 expect 断言其行为即可。关键在于导入语法要匹配导出方式,且测试环境需支持 ES 模块。
确认导出和导入写法一致
如果源文件用 export default 导出:
export default function add(a, b) {<br> return a + b;<br>}
测试文件中必须用默认导入语法:
math.test.jsimport add from './math.js';<br>test('adds two numbers', () => {<br> expect(add(1, 2)).toBe(3);<br>});
确保测试运行器支持 ESM
Node.js 14+ 和现代测试工具(如 Vitest)原生支持 ES 模块,默认可直接跑通上面的代码。
若用 Jest,默认不识别 .js 中的 export default,需额外配置:
- 在
package.json中添加"type": "module" - 安装并配置 Babel:
npm install -D babel-jest @babel/core @babel/preset-env - 或改用 Vitest(推荐),它开箱即用,无需编译配置
命名导出 vs 默认导出:别混用
常见错误是导出用 export default,但测试里写成 import { add } from './math.js' —— 这会报 add is not exported。
记住:
-
export default xxx→import xxx from '...' -
export const xxx = ...或export function xxx()→import { xxx } from '...'
配合 mock 验证副作用逻辑
如果默认导出的是一个带外部调用的函数(比如封装了 fetch),测试时应隔离依赖:
export default async function fetchUser(id) {<br> const res = await fetch(`/api/users/${id}`);<br> return res.json();<br>}
测试中可这样 mock:
import fetchUser from './api.js';<br>vi.mock('./api.js', async () => {<br> const actual = await vi.importActual('./api.js');<br> return {<br> default: vi.fn().mockResolvedValue({ id: 1, name: 'Alice' })<br> };<br>});<br><br>test('fetches user by id', async () => {<br> const user = await fetchUser(1);<br> expect(user.name).toBe('Alice');<br>});











