SuperAPI AI 工具集

oro-functional-testing

测试与质量

查看项目

更新于 10-16 01:35

技能介绍

用途:面向 OroCommerce 6.1 的 PHPUnit 功能测试,覆盖继承 WebTestCase 的控制器、REST API、控制台命令、服务与 ACL 规则,针对真实数据库运行。

主要能力:WebTestCase 负责启动内核、事务隔离、确定性加载 fixtures,并在 Symfony BrowserKit 之上提供 HTTP、grid、JSON 辅助方法。常用实例方法包括 initClient、generateBasicAuthHeader、generateApiAuthHeader、loadFixtures、getReference、getContainer、runCommand、requestGrid、getJsonResponseContent、assertHtmlResponseStatusCodeEquals、assertJsonResponseStatusCodeEquals、getUrl。

使用方式:测试类继承 WebTestCase,在 setUp 中调用 initClient 并按需传入认证头,再 loadFixtures。HTML 控制器用 generateBasicAuthHeader,REST API 用 generateApiAuthHeader,控制台命令无需认证头但仍需 initClient。隔离注解有 @dbIsolationPerTest(每个测试方法包裹事务并回滚)、@outputBuffering enabled(WebTestCase 子类必需)、@depends(继承 fixtures 与状态)。测试环境用 php bin/console oro:install --env=test 安装,CLI 参数在测试环境被忽略,安装参数需写在 config/config.yml 的 oro_test_framework.install_options 中;测试专用环境变量位于 .env-app.test.local,如 ORO_DB_DSN、ORO_MAILER_DSN。运行功能套件使用 docker compose run --rm toolbox bin/phpunit -c ./ --testsuite=functional,单元套件使用 --testsuite=unit。

限制与注意事项:不可在单次 PHPUnit 调用中同时运行单元与功能套件,单元测试注册的 mock 会干扰内核启动与服务解析。不要漏掉 @dbIsolationPerTest,否则同类各测试共享事务、状态串扰、失败依赖执行顺序。切勿向 oro:install --env=test 传 --user-email 等 CLI 参数,会被静默忽略。fixtures 默认在每个 fixture 后清空实体管理器,跨 fixture 引用的实体可能已分离,需实现 InitialFixtureInterface 才能保留。测试中不要用 bundle 别名表示实体 FQCN,应使用 Product::class 等类常量。更细内容参见 install-options、fixtures、acl-patterns、grid-testing 等参考文件。