AVA 配置完全指南:从 package.json 到 ava.config.* 文件
测试【免费下载链接】avaNode.js test runner that lets you develop with confidence 项目地址https://gitcode.com/gh_mirrors/ava/ava点击查看免费下载本文围绕 AVANode.js 测试运行器的配置体系展开系统讲解如何通过package.json中的ava字段或独立的ava.config.*文件集中管理测试运行行为涵盖全部配置选项、配置文件的查找与加载规则、工厂函数、--config指定备用配置、对象打印深度、实验特性、预加载模块与 Node 参数过滤等实战要点。读完本文你将能够像维护 ava.config.js 一样为不同场景单元测试/集成测试、monorepo、TypeScript 等编写出干净、可维护的 AVA 配置。为什么需要配置文件AVA 的全部 CLI 选项 都可以沉淀到配置中不必在每次执行npx ava时重复输入一长串参数。配置可以放在以下两处之一package.json中的ava字段JSON 形式无法使用函数ava.config.js/ava.config.mjs文件支持 ESM、工厂函数等高级能力。此外需要记住两条优先级规则CLI 参数永远优先于配置文件。文档明确说明Arguments passed to the CLI will always take precedence over the CLI options configured inpackage.jsondocs/06-configuration.md。在 CLI 上提供测试文件路径会覆盖files配置项。在 package.json 中配置 AVA最简单的入门方式是在package.json中增加ava字段。下面是一个完整的示例摘录自 docs/06-configuration.md{ ava: { files: [ test/**/*, !test/exclude-files-in-this-directory, !**/exclude-files-with-this-name.* ], match: [ *oo, !foo ], concurrency: 5, failFast: true, failWithoutAssertions: false, environmentVariables: { MY_ENVIRONMENT_VARIABLE: some value }, verbose: true, require: [ ./my-helper-module.js ], nodeArguments: [ --trace-deprecation, --napi-modules ] } }注意files中!前缀的用法以!开头的模式用于排除文件这是 AVA 全局模式语言的通用约定。该字段的核心作用在仓库根目录的 ava.config.js 中也能看到——AVA 自身就用它来排除测试夹具目录export default { files: [test/**, !test/**/{fixtures,helpers}/**], watchMode: { ignoreChanges: [{coverage,docs,media,test-types,test-tap}/**], }, environmentVariables: { AVA_FAKE_SCM_ROOT: .fake-root, // This is an internal test flag. }, };完整选项清单选项说明默认值files选择测试文件的 glob 模式数组。带下划线前缀的文件会被忽略默认只选中mjs与js扩展名的文件即使模式匹配了其他文件也一样。要允许其他扩展名需配合extensions使用见 docs/05-command-line.md 中的默认模式test.js、**/*.test.js、**/test/**/*.js等watchMode监视模式相关配置详见 watch-mode 配方—match与 CLI 的--match等价用于按标题匹配测试通常不放在package.json中更多见 按标题匹配测试—cache为true时把编译产物缓存在node_modules/.cache/ava为false时改用临时目录trueconcurrency同时运行的测试文件最大数量CPU 核心数workerThreads是否使用 worker thread 运行测试为false时测试在子进程中运行truefailFast一旦有测试失败就停止运行后续测试falsefailWithoutAssertions为false时没有执行断言的测试不会被判失败相关讨论见 断言trueenvironmentVariables注入到测试进程的环境变量会覆盖process.env中的同名变量—serial为true时禁止同一文件内测试的并行执行falsetap为true时启用 TAP 报告器falseverbose为true时启用详细输出当前 AVA 尚不支持非详细输出即详细输出实际是默认形态truesnapshotDir指定快照文件的固定存放位置当快照落点不符合预期时使用按测试文件位置自动推导extensions测试文件的扩展名。设置后会覆盖默认值[mjs, js]因此务必把这两者一并包含进列表[mjs, js]require在测试文件加载之前预加载的模块详见下文Requiring extra modules—timeout超时机制AVA 在每个测试之后重置计时器若在指定超时时间内没有收到新的测试结果则强制退出可用于兜住卡死的测试。更多选项见 测试超时文档10s见 docs/07-test-timeouts.mdnodeArguments用于启动 worker 进程的 Node.js 参数—sortTestFiles测试文件的排序比较函数仅在使用ava.config.*文件时可用示例见 拆分测试用于 CI—utilizeParallelBuilds为false时禁用 并行构建true关于timeout需要特别强调AVA 的超时与其他测试框架不同它不是在测试启动时一次性计时而是在每次产生测试结果后重置计时器。--timeout支持人类可读的写法例如npx ava --timeout10s、npx ava --timeout2m、npx ava --timeout100100 毫秒详情见 docs/07-test-timeouts.md。关于 TypeScript若要让 AVA 运行 TypeScript 测试需要在配置中提供typescript选项并额外安装ava/typescript依赖。使用 ava.config.* 文件当package.json无法满足需求例如需要工厂函数、sortTestFiles这样的函数型配置时应改用ava.config.js。如果项目尚未把.js当作 ES 模块处理则改用ava.config.mjs。使用ava.config.*文件有两个硬性前提package.json中不得包含ava属性或必须为空对象{}否则 AVA 会抛出 Conflicting configuration 错误任意目录下只能存在一个ava.config.*文件不能同时混用ava.config.js和ava.config.mjs。AVA 如何查找配置文件从源码 lib/load-config.js 可以还原完整的查找流程通过packageConfig(ava, {cwd})找到最近的package.json及其ava字段若存在并以该package.json所在目录作为projectDir调用findRepoRoot()从projectDir逐级向上直到文件系统根目录或遇到.git文件/目录确定仓库根从projectDir开始逐级向父目录搜索ava.config.js与ava.config.mjs同时探测ava.config.json并记入unsupportedFiles取找到的第一个文件直到仓库根为止。这意味着一个 monorepo 可以在仓库根放一份ava.config.*让所有子包共享同一份配置。这一点有对应的集成测试佐证test/config/integration.js中的looks for config files outside of project directory用例就从monorepo/package目录向上找到了仓库根的配置test/config/integration.js。在查找过程中若同一目录下同时存在ava.config.js与ava.config.mjs会抛出冲突错误对应测试throws an error if .js and .mjs configs are present见 test/config/next-gen.js若配置缺少默认导出、导出非纯对象、或包含ava属性同样会被拒绝见 test/config/loader.js。ava.config.js当项目已经通过type: module等方式把.js当作 ES 模块时优先使用ava.config.js。默认导出可以是普通对象或工厂函数也支持导出/返回 Promiseexport default { require: [./_my-test-helper.js] };export default function factory() { return { require: [./_my-test-helper.js] }; };工厂函数会被调用并收到一个包含projectDir属性的对象可用于按目录动态调整配置export default ({projectDir}) { if (projectDir /Users/username/projects/my-project) { return { // Config A }; } return { // Config B }; };从源码看工厂函数返回值必须仍是纯对象loadConfig中会检查isPlainObject(fileConf)否则抛出Factory method exported by ... must return a plain objectlib/load-config.js。对应测试用例loads config from factory function验证了工厂函数返回的files会基于projectDir拼接test/config/loader.js。ava.config.mjs当需要靠文件名本身来启用 ESM 时例如项目没有type: module使用ava.config.mjs。语法与ava.config.js完全一致同样支持普通对象、工厂函数以及 Promiseexport default { require: [./_my-test-helper.js] };export default function factory() { return { require: [./_my-test-helper.js] }; };export default ({projectDir}) { if (projectDir /Users/username/projects/my-project) { return { // Config A }; } return { // Config B }; };另外值得注意即使项目没有type: moduleAVA 也会尝试把ava.config.js当作 ESM 加载测试loads .js config as ESM证实了这一点见 test/config/next-gen.js因此.js与.mjs的区别主要体现在文件语义与项目既有约定上。用 --config 指定备用配置文件CLI 的--config标志可以指定一个特定的配置文件CLI 参考。规则如下优先使用.js文件仅当项目未把.js当作 ESM 时才用.mjs指定后该文件会完全覆盖package.json中的ava字段和ava.config.*的配置不做合并配置文件必须具有.js或.mjs扩展名否则报错源码见 lib/load-config.js测试见 test/config/loader.js从源码看显式提供configFile时 AVA 允许其与package.json中的ava字段同时存在allowConflictWithPackageJson为真时packageConf被清空因为显式配置的意图就是覆盖lib/load-config.js 与 test/config/loader.js。典型用法是把单元测试与集成测试分开跑。先有基础配置ava.config.jsexport default { files: [unit-tests/**/*] };再写一个继承它的集成测试配置integration-tests.config.jsimport baseConfig from ./ava.config.js; export default { ...baseConfig, files: [integration-tests/**/*] };然后分别运行npx ava npx ava --config integration-tests.config.js注意--config指定的文件不需要与package.json位于同一目录对应测试configFile does not need to be in the same directory as the package.json file见 test/config/loader.js。调整对象打印深度默认情况下AVA 只把嵌套对象打印到深度 3。当调试深层嵌套对象时可以在测试执行前修改 Node 的util.inspect.defaultOptions.depthimport util from util; import test from ava; util.inspect.defaultOptions.depth 5; // Increase AVAs printing depth test(My test, t { t.deepEqual(someDeeplyNestedObject, theExpectedValue); });AVA 对该深度设有最小值 3因此把值调小到 3 以下是无效的。实验特性ExperimentsAVA 会不定期引入实验性功能这些功能可能在任何时候变更或被移除不限于主版本发布时。通过nonSemVerExperiments配置逐项开启export default { nonSemVerExperiments: { feature: true } };从源码 lib/load-config.js 可以看到当前仓库支持的实验名仅有observeRunsFromConfig一个EXPERIMENTS new Set([observeRunsFromConfig])。配置了未支持的实验名会抛出nonSemVerExperiments.key ... is not a supported experiment且该配置必须是普通对象测试见 test/config/loader.js。Requiring extra modules预加载模块require配置用于在测试文件加载之前预载额外的模块是搭建测试环境setup/teardown的常用手段更完整的方案可参考 test-setup 配方。关键规则相对路径以项目目录为基准解析也可通过ava/typescript加载否则模块从项目内的node_modules中加载即可以预载依赖如babel/register可以指定单个值也可以是数组export default { require: ./_my-test-helper.js }export default { require: [./_my-test-helper.js] }如果模块导出的是函数该函数会被调用并 await_my-test-helper.js:export default function () { // Additional setup }还可以给该函数传参数。配置中使用数组形式的条目[模块路径, ...参数]ava.config.js:export default { require: [ [./_my-test-helper.js, my, arguments] ] }_my-test-helper.js:export default function (first, second) { // my, arguments // Additional setup }参数通过结构化克隆算法structured clone algorithm复制到目标进程Map值可以完好保留但Buffer会变成Uint8Array从node_modules加载的依赖同样可以导出函数并接收参数export default { require: babel/register }配置 worker 进程的 Node 参数nodeArguments配置用于指定启动 worker 进程时附加的 Node.js 参数它会与 CLI 传入的--node-arguments、以及启动 AVA 时传给node二进制的参数合并生效。CLI 用法见 docs/05-command-line.md#node-arguments注意官方提示只传可信值。针对 worker thread 的 Node 参数过滤这是一个仅配置文件可用的高级选项filterNodeArgumentsForWorkerThreads提供一个过滤函数用来剔除那些传给 worker thread 会直接抛错的参数例如仅在进程内有效的 V8 内部参数。该过滤器对 worker 子进程不生效。const processOnly new Set([ --allow-natives-syntax, --expose-gc ]); export default { filterNodeArgumentsForWorkerThreads: argument !processOnly.has(argument) }如果该配置项不是函数AVA 会抛出错误源码校验见 lib/load-config.js测试见 test/config/loader.js。配置加载的常见错误一览结合 lib/load-config.js 与测试用例 test/config/loader.js、test/config/next-gen.js以下情况都会导致配置加载失败同时存在ava.config.js与ava.config.mjsConflicting configuration ...package.json含非空ava字段且同时存在ava.config.*Conflicting configuration in ... and package.json配置文件没有默认导出... must have a default export导出非纯对象或工厂函数未返回纯对象must export a plain object or factory function/Factory method exported by ... must return a plain object配置对象里出现ava属性Encountered ’ava’ property in ...配置不应再包一层ava--config指向非.js/.mjs文件Could not load config file; it should have .js or .mjs extensionfilterNodeArgumentsForWorkerThreads非函数、nonSemVerExperiments非对象或包含未支持的实验名。这些错误在集成测试中均有快照覆盖例如test/config/integration.js的formats errors from ava.config.js用例验证了错误消息以Error loading ava.config.js:开头输出test/config/integration.js。实践建议小项目直接使用package.json的ava字段零文件成本需要函数型配置sortTestFiles、filterNodeArgumentsForWorkerThreads或工厂函数切换到ava.config.jsmonorepo在仓库根放一份ava.config.*子包无需各自维护若某个子包需要差异可用--config指向独立文件CI 场景结合utilizeParallelBuilds与sortTestFiles进行并行构建与稳定排序参考 拆分测试用于 CITypeScript 项目配置typescript选项并安装ava/typescript详见 typescript 配方。通过把默认行为沉淀到配置中团队可以在不改变任何 CLI 调用方式的前提下统一 AVA 的运行形态——这正是 AVA 配置文件设计的核心价值。赞分享测试【免费下载链接】avaNode.js test runner that lets you develop with confidence 项目地址https://gitcode.com/gh_mirrors/ava/ava点击查看免费下载相关推荐CLIPSeg高级应用多标签分割与图像-文本混合提示实战案例CLIPSeg高级应用多标签分割与图像 文本混合提示实战案例 CLIPSeg是一款基于CVPR 2022论文Image Segmentation UsingWireit配置文件从package.json到wireit对象的终极转换指南Wireit配置文件从package.json到wireit对象的终极转换指南 Wireit 是一个强大的npm脚本优化工具它能将你的普通npm/pn构建工具开发工具终极GTA5安全增强指南如何使用YimMenu保护你的游戏体验终极GTA5安全增强指南如何使用YimMenu保护你的游戏体验 YimMenu是一款专为GTA5设计的开源游戏增强工具它不仅能提供丰富的游戏功能更重要的是逆向工程游戏开发上一篇终极修复指南解决dnSpy启动故障的完整方案下一篇RedditVideoMakerBot项目文档版本控制工具Git使用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Cherry Studio 非视觉模型图片附件回退行为变更解析:OCR 无文本时以 base64 原生图片转发

Cherry Studio 非视觉模型图片附件回退行为变更解析:OCR 无文本时以 base64 原生图片转发

人工智能大模型AI 应用交互助手本地部署 【免费下载链接】cherry-studio 🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端 项目地址: https://gitcode.com/CherryHQ/cherry-studio 点击查看 免费下载 本文解析 Cherry Studio v2 中一项针对「非…

2026/9/20 5:45:39 阅读更多 →
免费录制 macOS 屏幕与系统声音:QuickRecorder 使用指南

免费录制 macOS 屏幕与系统声音:QuickRecorder 使用指南

免费录制 macOS 屏幕与系统声音:QuickRecorder 使用指南 【免费下载链接】QuickRecorder A lightweight screen recorder based on ScreenCapture Kit for macOS / 基于 ScreenCapture Kit 的轻量化多功能 macOS 录屏工具 项目地址: https://gitcode.com/GitHub_T…

2026/9/20 5:45:39 阅读更多 →
ICEM CFD六面体网格划分全流程:拓扑修复、Blocking与棱柱层

ICEM CFD六面体网格划分全流程:拓扑修复、Blocking与棱柱层

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 5:44:38 阅读更多 →

最新新闻

外贸建站用什么平台好?新手入门避坑指南

外贸建站用什么平台好?新手入门避坑指南

外贸建站用什么平台好?新手入门避坑指南 网站做好了没人访问,这是90%外贸新手最崩溃的时刻。你花了几万块定制开发,页面精美得像杂志,但打开百度或谷歌搜产品,根本找不到你。别慌,这通常不是内容的问题,而是 技术选型 从一开始就错了。…

2026/9/21 9:45:18 阅读更多 →
一个服务器上有两个网站要备案两次吗?源码下载避坑指南

一个服务器上有两个网站要备案两次吗?源码下载避坑指南

一个服务器上有两个网站要备案两次吗?源码下载避坑指南 别再死磕那些丑得令人发指的模板网站了,真的,看着都尴尬。很多新手为了省事,直接去搜“源码下载”,结果装出来的页面配色像上世纪的网吧,布局挤得像早高峰的地铁,客户一眼就能看穿你的不专业。更头疼的是,当你终于搞定两个网站,准备绑上服务器时,卡在了备案…

2026/9/21 9:30:07 阅读更多 →
个人博客网页设计论文选题怎么选,3个维度避开域名服务器坑

个人博客网页设计论文选题怎么选,3个维度避开域名服务器坑

个人博客网页设计论文选题怎么选,3个维度避开域名服务器坑 域名解析报错 502,服务器内存爆满,这种“代码写得好,上线就抓瞎”的尴尬,是不是你写个人博客网页设计论文时的真实写照?很多同学在选题和实操阶段,死磕 CSS 动画或 JS 交互,却对最底层的域名绑定和服务器配置一知半解。…

2026/9/21 9:16:31 阅读更多 →
2026最新:破解软件下载网站哪个好,自建系统全解析

2026最新:破解软件下载网站哪个好,自建系统全解析

2026最新:破解软件下载网站哪个好,自建系统全解析 改个需求建站公司拖一周,这种憋屈事儿我见得太多了。很多设计师转前端的朋友,手里有活儿,但苦于没有稳定的流量入口,想搭个软件下载站,却又被外包公司的拖延症搞崩溃。其实, 2026最新…

2026/9/21 8:58:55 阅读更多 →
3招搞定网站标识代码怎么加,避开性能优化大坑

3招搞定网站标识代码怎么加,避开性能优化大坑

3招搞定网站标识代码怎么加,避开性能优化大坑 域名解析配错、服务器环境没选对,90%的新手在搞SEO时都栽在这。你辛辛苦苦写了篇长文,结果用户打开页面转圈加载,搜索引擎爬虫也抓不到核心数据,这锅谁背?别怪算法变了,很多时候是基础代码没埋对,尤其是那些看似不起眼的网站标识代码,一旦加错位置或格式,不仅…

2026/9/21 8:45:18 阅读更多 →
3类高危漏洞:网页制作模板中文源码下载安全自查

3类高危漏洞:网页制作模板中文源码下载安全自查

3类高危漏洞:网页制作模板中文源码下载安全自查 域名服务器搞不懂,是无数运营推广人员接手“网页制作模板中文”项目时的噩梦。你手里拿着一个看起来很漂亮的模板,后台却像个黑盒,更别提那些藏在代码深处的安全隐患。…

2026/9/21 8:30:15 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →