当前位置: 首页 > news >正文

Kotti Next:Kotti CMS的精神继承者,调试代码(使用WorkBuddy AI自动编程)前端未调通,重新生成一个更加轻型的前端

前面使用WorkBuddy AI自动编程写了Kotti Next这个项目:https://blog.csdn.net/skywalk8163/article/details/159729287

repo:https://gitcode.com/skywalk163/kottinext

现在进行代码测试。

先上结论:后端调调通了,前端未调通,准备重新生成一个更加轻型的前端

先安装服务器

### Installation ```bash # Create virtual environment python -m venv .venv source .venv/bin/activate # Linux/Mac .venv\Scripts\activate # Windows # Install dependencies pip install -e ".[dev]" ``` ### Initialize Database ```bash kotti-next init ``` This will: - Create the database tables - Create an admin user (username: `admin`, password: `admin`) ### Run Development Server ```bash kotti-next dev ``` Or with auto-reload: ```bash kotti-next dev --reload ```

对于我的系统,代码在这个目录:c:\Users\Admin\WorkBuddy\20260330150804\backend>

发现没有数据库初始化这条命令啊

(.venv) c:\Users\Admin\WorkBuddy\20260330150804\backend>kotti-next init Usage: kotti-next [OPTIONS] COMMAND [ARGS]... Try 'kotti-next --help' for help. Error: No such command 'init'.

原来是这条命令:

kotti-next db init

执行后报错:

(.venv) c:\Users\Admin\WorkBuddy\20260330150804\backend>kotti-next db init → Creating database tables… Traceback (most recent call last): File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\clsregistry.py", line 516, in _resolve_name rval = d[token] ~^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\util\_collections.py", line 340, in __missing__ self[key] = val = self.creator(key) ^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\clsregistry.py", line 484, in _access_cls return self.fallback[key] ~~~~~~~~~~~~~^^^^^ KeyError: 'Webhook' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main File "<frozen runpy>", line 88, in _run_code File "G:\workbuddy\.venv\Scripts\kotti-next.exe\__main__.py", line 5, in <module> File "G:\workbuddy\.venv\Lib\site-packages\click\core.py", line 1485, in __call__ return self.main(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\click\core.py", line 1406, in main rv = self.invoke(ctx) ^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\click\core.py", line 1873, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\click\core.py", line 1873, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\click\core.py", line 1269, in invoke return ctx.invoke(self.callback, **ctx.params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\click\core.py", line 824, in invoke return callback(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\Admin\WorkBuddy\20260330150804\backend\kotti_next\cli\db.py", line 99, in init asyncio.run(_run()) File "E:\py312\Lib\asyncio\runners.py", line 195, in run return runner.run(main) ^^^^^^^^^^^^^^^^ File "E:\py312\Lib\asyncio\runners.py", line 118, in run return self._loop.run_until_complete(task) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "E:\py312\Lib\asyncio\base_events.py", line 691, in run_until_complete return future.result() ^^^^^^^^^^^^^^^ File "C:\Users\Admin\WorkBuddy\20260330150804\backend\kotti_next\cli\db.py", line 72, in _run await session.execute( File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\ext\asyncio\session.py", line 449, in execute result = await greenlet_spawn( ^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\util\_concurrency_py3k.py", line 203, in greenlet_spawn result = context.switch(value) ^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2351, in execute return self._execute_internal( ^^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\session.py", line 2249, in _execute_internal result: Result[Any] = compile_state_cls.orm_execute_statement( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\context.py", line 306, in orm_execute_statement result = conn.execute( ^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1419, in execute return meth( ^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\sql\elements.py", line 527, in _execute_on_connection return connection._execute_clauseelement( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1633, in _execute_clauseelement compiled_sql, extracted_params, cache_hit = elem._compile_w_cache( ^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\sql\elements.py", line 716, in _compile_w_cache compiled_sql = self._compiler( ^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\sql\elements.py", line 324, in _compiler return dialect.statement_compiler(dialect, self, **kw) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 1461, in __init__ Compiled.__init__(self, dialect, statement, **kwargs) File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 901, in __init__ self.string = self.process(self.statement, **compile_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 947, in process return obj._compiler_dispatch(self, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\sql\visitors.py", line 138, in _compiler_dispatch return meth(self, **kw) # type: ignore # noqa: E501 ^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\sql\compiler.py", line 4807, in visit_select compile_state = select_stmt._compile_state_factory( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\sql\base.py", line 775, in create_for_statement return klass.create_for_statement(statement, compiler, **kw) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\context.py", line 447, in create_for_statement return cls._create_orm_context( ^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\context.py", line 1175, in _create_orm_context _QueryEntity.to_compile_state( File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\context.py", line 2628, in to_compile_state _MapperEntity( File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\context.py", line 2708, in __init__ entity._post_inspect File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 1235, in __get__ obj.__dict__[self.__name__] = result = self.fget(obj) ^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\mapper.py", line 2733, in _post_inspect self._check_configure() File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\mapper.py", line 2410, in _check_configure _configure_registries({self.registry}, cascade=True) File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\mapper.py", line 4227, in _configure_registries _do_configure_registries(registries, cascade) File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\mapper.py", line 4268, in _do_configure_registries mapper._post_configure_properties() File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\mapper.py", line 2427, in _post_configure_properties prop.init() File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\interfaces.py", line 595, in init self.do_init() File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\relationships.py", line 1655, in do_init self._setup_entity() File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\relationships.py", line 1865, in _setup_entity self._clsregistry_resolve_name(argument)(), ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\clsregistry.py", line 520, in _resolve_name self._raise_for_name(name, err) File "G:\workbuddy\.venv\Lib\site-packages\sqlalchemy\orm\clsregistry.py", line 501, in _raise_for_name raise exc.InvalidRequestError( sqlalchemy.exc.InvalidRequestError: When initializing mapper Mapper[Principal(principals)], expression 'Webhook' failed to locate a name ('Webhook'). If this is a class name, consider adding this relationship() to the <class 'kotti_next.models.principal.Principal'> class after both dependent classes have been defined.

AI去搞定

搞定之后,发现数据库这块还是有问题,让AI来搞定吧:

让AI解决数据库方面的问题

你的测试包含了数据库这块吗? 怎么还有一些问题。比如: File "C:\Users\Admin\WorkBuddy\20260330150804\backend\kotti_next\cli\db.py", line 96, in _run
await close_db()
^^^^^^^^
UnboundLocalError: cannot access local variable 'close_db' where it is not associated with a value

请添加数据库的测试部分,尽量覆盖全面。并解决测试中碰到的相关问题。

AI搞定,数据库初始化问题解决

(.venv) c:\Users\Admin\WorkBuddy\20260330150804\backend>kotti-next db init → Creating database tables… Admin user already exists, skipping ✓ Initialisation complete

前端测试报错

在前端目录,执行命令

node node_modules/vitest/vitest.mjs run --reporter=verbose
c:\Users\Admin\WorkBuddy\20260330150804\frontend>node node_modules/vitest/vitest.mjs run --reporter=verbose RUN v4.1.2 c:/Users/Admin/WorkBuddy/20260330150804/frontend ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Failed Suites 6 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ FAIL tests/api/auth.test.ts [ tests/api/auth.test.ts ] TypeError: Cannot read properties of undefined (reading 'config') ❯ tests/api/auth.test.ts:22:1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/6]⎯ FAIL tests/api/client.test.ts [ tests/api/client.test.ts ] TypeError: Cannot read properties of undefined (reading 'config') ❯ tests/api/client.test.ts:55:1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/6]⎯ FAIL tests/api/nodes.test.ts [ tests/api/nodes.test.ts ] TypeError: Cannot read properties of undefined (reading 'config') ❯ tests/api/nodes.test.ts:28:1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/6]⎯ FAIL tests/stores/auth.test.ts [ tests/stores/auth.test.ts ] FAIL tests/stores/content.test.ts [ tests/stores/content.test.ts ] Error: Cannot find module './use-config' Require stack: - c:\Users\Admin\WorkBuddy\20260330150804\frontend\node_modules\naive-ui\lib\_mixins\index.js - c:\Users\Admin\WorkBuddy\20260330150804\frontend\node_modules\naive-ui\lib\affix\src\Affix.js - c:\Users\Admin\WorkBuddy\20260330150804\frontend\node_modules\naive-ui\lib\affix\index.js ❯ Object.<anonymous> node_modules/naive-ui/lib/_mixins/index.js:7:20 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { code: 'MODULE_NOT_FOUND', requireStack: [ 'c:\Users\Admin\WorkBuddy\20260330150804\frontend\node_modules\naive-ui\lib\_mixins\index.js', 'c:\Users\Admin\WorkBuddy\20260330150804\frontend\node_modules\naive-ui\lib\affix\src\Affix.js', 'c:\Users\Admin\WorkBuddy\20260330150804\frontend\node_modules\naive-ui\lib\affix\index.js' ] } ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/6]⎯ FAIL tests/stores/ui.test.ts [ tests/stores/ui.test.ts ] TypeError: Cannot read properties of undefined (reading 'config') ❯ tests/stores/ui.test.ts:5:1 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/6]⎯ Test Files 6 failed (6) Tests no tests Start at 22:37:15 Duration 6.72s (transform 669ms, setup 1.86s, import 0ms, tests 0ms, environment 27.07s)

AI说搞定了,问题是我测试下来还是报错

升级naive-ui到最新版试试

npm install naive-ui@latest

降级到2.38.1试试

npm install naive-ui@2.38.1

奇了怪了,版本就是不动,后来用npm ls naive-ui,发现版本是变了

c:\Users\Admin\WorkBuddy\20260330150804\frontend>npm view naive-ui version 2.44.1 c:\Users\Admin\WorkBuddy\20260330150804\frontend>npm uninstall naive-ui removed 21 packages in 12s 168 packages are looking for funding run `npm fund` for details c:\Users\Admin\WorkBuddy\20260330150804\frontend>npm install naive-ui@2.38.1 added 21 packages in 31s 169 packages are looking for funding run `npm fund` for details c:\Users\Admin\WorkBuddy\20260330150804\frontend>npm view naive-ui version 2.44.1 c:\Users\Admin\WorkBuddy\20260330150804\frontend>npm ls naive-ui kotti-next-admin@0.1.0 c:\Users\Admin\WorkBuddy\20260330150804\frontend `-- naive-ui@2.38.1

结果还是一样的报错,也许不是版本的问题吧。

AI DuMate进行分析

单独运行 ui.test.ts 成功了!这说明问题出在并行运行多个测试文件时的冲突。让我逐个运行其他测试文件:


所有测试文件单独运行都能通过!这确认了问题是并行运行时的冲突。
所有测试文件单独运行都通过了!问题确认是并行运行时的 mock 冲突。

问题分析

根本原因:vitest 4.x 在并行运行多个测试文件时,不同测试文件中的vi.mock()会相互干扰。

具体来说:

  1. 多个测试文件(auth.test.tsclient.test.tsnodes.test.ts等)都对@/api/clientaxios进行了 mock
  2. 并行运行时,这些 mock 会相互覆盖或冲突
  3. 导致某些测试文件在加载模块时获取到了错误的 mock 实例,从而抛出Cannot read properties of undefined (reading 'config')错误

解决方案

vitest.config.ts中添加了fileParallelism: false配置:

test: { globals: true, environment: 'jsdom', setupFiles: ['./tests/setup.ts'], fileParallelism: false, // 禁用文件级并行执行 // ... }

这样测试文件会顺序执行,避免了 mock 冲突。

后续优化建议

如果你想恢复并行执行以加快测试速度,可以考虑:

  1. 统一 mock 设置:将共享的 mock(如@/api/client)移到tests/setup.ts中统一管理
  2. 使用vi.resetModules():在每个测试文件的beforeEach中重置模块缓存
  3. 隔离 mock 作用域:确保每个测试文件的 mock 不会影响其他文件

按照DuMate的修改建议,在vtest.config.ts文件中加入

// 禁用并行执行以避免 mock 冲突 fileParallelism: false,

但是还是一样的报错信息:

FAIL tests/stores/content.test.ts [ tests/stores/content.test.ts ]
TypeError: Cannot read properties of undefined (reading 'config')
❯ tests/stores/content.test.ts:42:1

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/6]⎯

FAIL tests/stores/ui.test.ts [ tests/stores/ui.test.ts ]
TypeError: Cannot read properties of undefined (reading 'config')
❯ tests/stores/ui.test.ts:5:1

改在ubuntu下测试

怀疑是windows的干扰,改在ubuntu下测试,还是报错,但是报错信息不一样了:

ubuntu下的报错

skywalk@DESKTOP-9C5AU01:/mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend$ node node_modules/vitest/vitest.mjs run --reporter=verbose
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Errors ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

Vitest caught 6 unhandled errors during the test run.
This might cause false positive tests. Resolve unhandled errors to make sure your tests are not affected.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Error ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Error: [vitest-pool]: Failed to start forks worker for test files /mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend/tests/api/auth.test.ts.
❯ node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3450:94
❯ Pool.schedule node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3450:5

Caused by: Error: [vitest-pool-runner]: Timeout waiting for worker to respond
❯ Timeout.<anonymous> node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3030:58
❯ listOnTimeout node:internal/timers:594:17
❯ processTimers node:internal/timers:529:7


⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Error ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Error: [vitest-pool]: Failed to start forks worker for test files /mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend/tests/api/client.test.ts.
❯ node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3450:94
❯ Pool.schedule node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3450:5

Caused by: Error: [vitest-pool-runner]: Timeout waiting for worker to respond
❯ Timeout.<anonymous> node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3030:58
❯ listOnTimeout node:internal/timers:594:17
❯ processTimers node:internal/timers:529:7


⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Error ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Error: [vitest-pool]: Failed to start forks worker for test files /mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend/tests/api/nodes.test.ts.
❯ node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3450:94
❯ Pool.schedule node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3450:5

Caused by: Error: [vitest-pool-runner]: Timeout waiting for worker to respond
❯ Timeout.<anonymous> node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3030:58
❯ listOnTimeout node:internal/timers:594:17
❯ processTimers node:internal/timers:529:7


⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Error ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Error: [vitest-pool]: Failed to start forks worker for test files /mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend/tests/stores/auth.test.ts.
❯ node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3450:94
❯ Pool.schedule node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3450:5

Caused by: Error: [vitest-pool-runner]: Timeout waiting for worker to respond
❯ Timeout.<anonymous> node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3030:58
❯ listOnTimeout node:internal/timers:594:17
❯ processTimers node:internal/timers:529:7


⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Error ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Error: [vitest-pool]: Failed to start forks worker for test files /mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend/tests/stores/content.test.ts.
❯ node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3450:94
❯ Pool.schedule node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3450:5

Caused by: Error: [vitest-pool-runner]: Timeout waiting for worker to respond
❯ Timeout.<anonymous> node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3030:58
❯ listOnTimeout node:internal/timers:594:17
❯ processTimers node:internal/timers:529:7


⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Error ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Error: [vitest-pool]: Failed to start forks worker for test files /mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend/tests/stores/ui.test.ts.
❯ node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3450:94
❯ Pool.schedule node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3450:5

Caused by: Error: [vitest-pool-runner]: Timeout waiting for worker to respond
❯ Timeout.<anonymous> node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3030:58
❯ listOnTimeout node:internal/timers:594:17
❯ processTimers node:internal/timers:529:7

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯


Test Files no tests
Tests no tests
Errors 6 errors
Start at 07:46:12
Duration 360.12s (transform 0ms, setup 0ms, import 0ms, tests 0ms, environment 0ms)

文心的回答

在 Ubuntu 下运行 Vitest 时遇到[vitest-pool]: Failed to start forks worker for test files,Timeout waiting for worker to respond错误,通常与 Worker 进程启动超时或环境配置有关。可以尝试以下解决方案:

  1. 切换进程池类型‌:
    尝试将vitest的进程池类型从默认的threads切换为forks,以避免与 Node.js 的fetchAPI 或abort controller的兼容性问题。在vitest.config.ts中添加以下配置:

    export default defineConfig({ test: { pool: 'forks', // 或 'vmForks' }, })

    这种方法可以绕过threads池可能存在的兼容性问题,

  2. 增加超时时间‌:
    如果 Worker 启动时间较长,可以尝试增加超时设置,例如:

    export default defineConfig({ test: { pool: 'forks', poolOptions: { forks: { maxConcurrency: 1, }, }, }, })
  3. 检查系统资源‌:
    在 Ubuntu 环境中,确保系统有足够的内存和 CPU 资源供 Vitest 启动多个 Worker 进程。如果资源紧张,可能导致 Worker 启动缓慢或失败。

  4. 禁用 Worker 池‌:
    如果问题持续存在,可以暂时禁用 Worker 池,使用单线程运行测试:

    npx vitest run --threads=false

  5. 更新 Vitest 和相关依赖‌:
    确保使用的 Vitest 版本是最新的,或者至少是稳定版本,以避免已知的 Worker 启动问题。

  6. 检查环境变量和权限‌:
    确保在 Ubuntu 环境中,Vitest 能够正确访问所需的环境变量和文件权限,尤其是当测试涉及文件系统或网络请求时。

尝试禁用Worker池报错

用这条命令报错

node node_modules/vitest/vitest.mjs run --reporter=verbose --threads=false

报错信息

skywalk@DESKTOP-9C5AU01:/mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend$ node node_modules/vitest/vitest.mjs run --reporter=verbose --threads=false file:///mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend/node_modules/vitest/dist/chunks/cac.DRKYQDPl.js:406 throw new CACError(`Unknown option \`${name.length > 1 ? `--${name}` : `-${name}`}\``); ^ CACError: Unknown option `--threads` at Command.checkUnknownOptions (file:///mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend/node_modules/vitest/dist/chunks/cac.DRKYQDPl.js:406:17) at CAC.runMatchedCommand (file:///mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend/node_modules/vitest/dist/chunks/cac.DRKYQDPl.js:606:13) at CAC.parse (file:///mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend/node_modules/vitest/dist/chunks/cac.DRKYQDPl.js:547:12) at file:///mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend/node_modules/vitest/dist/cli.js:11:13 at ModuleJob.run (node:internal/modules/esm/module_job:271:25) at async onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:578:26) at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:116:5) Node.js v22.14.0

据说新版本没有--threads指令。可以用--pool=forks这个指令。

用--pool=forks这个指令后有新的报错

skywalk@DESKTOP-9C5AU01:/mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend$ node node_modules/vitest/vitest.mjs run --reporter=verbose --pool=forks RUN v4.1.2 /mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Errors ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Vitest caught 6 unhandled errors during the test run. This might cause false positive tests. Resolve unhandled errors to make sure your tests are not affected. ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Error ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Error: [vitest-pool]: Failed to start forks worker for test files /mnt/c/Users/Admin/WorkBuddy/20260330150804/frontend/tests/api/auth.test.ts. ❯ node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3450:94 ❯ Pool.schedule node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3450:5 Caused by: Error: [vitest-pool-runner]: Timeout waiting for worker to respond ❯ Timeout.<anonymous> node_modules/vitest/dist/chunks/cli-api.Bxr1Nn49.js:3030:58 ❯ listOnTimeout node:internal/timers:594:17 ❯ processTimers node:internal/timers:529:7

看来是时间超时了。

尝试增加超时

export default defineConfig({ test: { pool: 'forks', poolOptions: { forks: { maxConcurrency: 1, }, }, }, })

没看懂,这里怎么就增加超时了?所以我没有去改它。

最终我是让WorkBuddy去做一个新的更轻型的前端。

尝试修改配置文件

修改了又注释掉了,直接用--pool=forks就行了。

// 将 vitest 的进程池类型从默认的 threads 切换为 forks pool: 'forks',

决定让WorkBuddy去做一个新的更轻型的前端

我前端测试的时候,还是有报错,好像跟进程池有关系。为什么你的测试就没有报错?是不是vite是比较重的框架?帮我找一个相对更加轻型的前端(因为kotti就是轻型框架),做kotti-next的新前端,放置在tinyfrontend目录。同时写好全面测试的代码。

http://www.jsqmd.com/news/575771/

相关文章:

  • STM32H723+DP83848以太网实战:从CubeMX配置到RT-Thread移植的完整避坑指南
  • 构建随身游戏库:Playnite便携版从配置到优化的完整指南
  • Speech Seaco Paraformer新手入门:从安装到识别,手把手教你语音转文字
  • Java集成大华人脸门禁SDK实战:从设备登录到事件告警的全流程解析
  • IP-Adapter-FaceID在医疗领域的应用探索:人脸分析与诊断辅助
  • 物理对抗攻击的六维评估——从理论到实践的hiPAA指标深度解析
  • GHelper轻量级华硕硬件控制工具深度指南:如何三步释放笔记本潜能
  • 从脚本到硬件:Python自动化工具将AD9361配置脚本转换为可综合Verilog模块
  • ESP32异步TCP通信:AsyncTCP底层原理与工程实践
  • Janus-Pro-7B惊艳案例:Excel图表→趋势分析+异常点定位+改进建议
  • Qwen3-TTS语音合成效果展示:‘魔王降临’关卡震撼音效生成实录
  • 从火星车到智能家电:聊聊那些藏在身边的RTOS(FreeRTOS、VxWorks、RT-Thread)
  • B站视频缓存转换终极指南:m4s-converter让你的离线视频重获新生
  • ArcMap 10.8 导出高清地图到PDF/图片的保姆级教程(附分辨率设置与常见报错解决)
  • 豆包大模型日均Token使用量超120万亿,Seedance 2.0 API开启公测
  • Pretext:前端文本布局的性能革命
  • PADS Logic避坑指南:封装向导创建STM32原理图时90%人会犯的3个错误
  • Wan2.2-I2V-A14B效果展示:xFormers加速下流畅动态海鸥飞行视频作品
  • DeepSeek-OCR-2应用实战:快速提取发票信息,财务效率翻倍
  • Ubuntu 20.04 下 LVI-SAM 复现全记录:从 gtsam 版本踩坑到 OpenCV 头文件修改
  • 新手友好:通过快马平台和openclaw 101轻松入门机器人抓取
  • FaceFusion商业应用案例:电商模特图快速换脸实战解析
  • 013、部署篇:从本地开发到云原生(Docker/K8s)服务化部署
  • AudioSeal实际作品分享:5类AI生成音频(TTS/配音/合成)水印实测
  • Unity HUB国际版模块管理指南:彻底删除与重装Android SDK
  • export MPLBACKEND=Agg命令使用
  • 网盘文件直链解析工具实用指南
  • 别再死记硬背了!用‘海绵宝宝和派大星’帮你秒懂无线信道里的时延与带宽
  • 从ChatGLM到语音识别:实战Xinference多模态模型部署,让你的AI应用不再单一
  • Qwen3-ASR-1.7B镜像免配置:insbase-cuda124-pt250-dual-v7一键启动