SuperAPI AI 工具集

craft-pest

数据与分析

查看项目

更新于 10-16 00:30

技能介绍

用途:为 Craft CMS 5 插件与模块编写 Pest 测试提供参考,核心依赖 markhuot/craft-pest-core。资料强调插件测试最常见的失败不是断言错误,而是套件写入了不该写的数据库,或仅因开发者本机环境状态而通过。

主要能力与要点:

  1. 数据库隔离:markhuot\craftpest\test\TestCase 本身不包含回滚,只有 RefreshesDatabase trait 会开启事务并在 teardown 回滚。tests/Pest.php 需同时绑定两者:uses(\markhuot\craftpest\test\TestCase::class, \markhuot\craftpest\test\RefreshesDatabase::class)->in(DIR);
  2. 环境变量覆盖与工作目录绑定:InstallsCraft::loadPhpunitXmlEnvironmentVariables() 只查找 getcwd().'/phpunit.xml' 与 getcwd().'/phpunit.xml.dist',不解析 --configuration 参数。因此插件套件必须从插件自身根目录运行,例如 vendor/bin/pest、composer test,或在宿主项目中用 ddev exec --dir /var/www/html/vendor/acme/my-plugin vendor/bin/pest。从共享项目根目录带 --configuration 运行被视为不安全。
  3. 隔离检查清单:绑定 RefreshesDatabase;在 Craft 启动前固定 CRAFT_DB_DATABASE;使用会抛异常的 fail-closed 数据库守卫(不要用 exit(1));为每个插件唯一固定 CRAFT_ENVIRONMENT;应用创建后设置 date_default_timezone_set('UTC');phpunit.xml.dist 中提供相同 <env> 配置;强制数据库名与表前缀,其余连接坐标用 default="true";Install::safeUp() 用 createIndexIfMissing()/Db::findForeignKey() 保证幂等;按测试创建并清理站点;显式安装被测插件;显式固定版本;计数断言限定在测试创建的行;静音审计/事件出口;用桩替换队列;确保 CI 中真正运行 Pest 任务。

适用场景:新插件测试搭建、测试误写开发库排查、本地通过但 CI 失败、控制器/元素工厂/队列任务测试、多站点测试、CI 接入等。

限制与说明:资料未提供收费、价格、平台支持范围等信息。纯单元测试无需启动 Craft 时,可跳过 craft-pest,直接继承 PHPUnit\Framework\TestCase。绿色套件不能证明服务层覆盖 HTTP 层、种子安装结果权威、控制台等价浏览器、长进程等价请求序列,未进入 CI 的套件会随代码腐化。