Skip to content

create-plugin 生成的插件跑不了自己的测试:模板写入 test 文件与 test 脚本,却没在 devDependencies 里声明 @testing-library/react 与 jest-dom #3716

Description

@yinlianghui

#3709 的修复过程中读 packages/create-plugin/src/index.ts 全文时量到的。与 #3709(文档记错产物)和 #3715(整页失真)都不同:这一条是生成器本身的缺陷,产物在自己的机器上就跑不起来。

事实

生成器写入 src/PascalImpl.test.tsx(index.ts:322-345),内容包含:

import { describe, it, expect } from 'vitest';
import { render, screen } from '@testing-library/react';
...
    expect(screen.getByText('Pascal Plugin')).toBeInTheDocument();

同一个生成器写入的 devDependencies(index.ts:154-160)只有五项:

'@vitejs/plugin-react', typescript, vite, 'vite-plugin-dts', vitest

即:

  • @testing-library/react 没有声明 —— npm test(脚本是 vitest run)在解析 import 时即失败;
  • toBeInTheDocument() 来自 @testing-library/jest-dom,同样没有声明,而且模板也没有写任何 vitest setup 文件去注册它的 matcher;
  • 生成的 vite.config.ts(index.ts:187-217)没有 test 段,没有 environment: 'jsdom',也没有 setupFiles —— 即便补上前两个依赖,渲染仍会因为默认 node 环境而失败。

三者叠加:脚手架产物的 npm test 从第一次运行起就是红的,而它同时是模板唯一的示例测试。

为什么值得修

create-plugin 的卖点之一是文档写的 "Ready to Develop - Start coding immediately"。新插件作者的第一条命令通常就是 npm test,拿到的是一个不像自己写错、更像仓库坏了的解析错误。

处置倾向(不替分诊拍板)

两条路,都在 packages/create-plugin/src/index.ts 内:

  • A 补齐 —— devDependencies 加 @testing-library/react@testing-library/jest-domjsdom,vite.config 模板加 test: { environment: 'jsdom', setupFiles: [...] } 并写一个 setup 文件。产物开箱即绿。
  • B 减掉 —— 不再生成示例测试,test 脚本也去掉,把测试栈的选择留给插件作者。

倾向 A:模板已经替作者选了 vitest(scripts 与 devDependencies 都在),选了一半却留一个跑不通的示例,比不选更糟;而且 A 之后可以用一条「生成到临时目录并跑一次 install + test」的测试把它钉住,B 则没有可钉的对象。但这属于模板契约取舍,留给分诊。

注:补的版本区间同样受 #3711 门禁约束的那条仓规影响 —— 它们写在 .ts 源码里而不是散文里,不在该门禁的扫描面上,但同样会漂;若选 A,值得顺带考虑这些区间的来源(与本仓根清单对齐,而不是各写各的)。

已搜重

create-plugin generator template testing-librarycreate-plugin scaffold docs 两组关键字搜过开放 issue,无命中。


Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions