You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yii2框架下使用Codeception进行功能测试出现404错误求助

排查Yii2功能测试中404错误的可能原因

你提到用两个不同的functional.suite.yml配置运行测试时,测试本身成功但过程中出现404错误,结合你贴出的测试代码,我整理了几个常见的排查方向:

1. 路由配置的环境差异

你的测试请求的是example/test2,首先要确认两个配置对应的环境里,应用的路由规则是否一致:

  • 检查两个环境下的API配置文件(比如config/web.php或config/api.php)中的urlManager配置,是否正确映射了example/test2对应的控制器和方法
  • 如果开启了URL美化,确认测试环境是否正确配置了重写规则,且测试请求的路径没有遗漏必要的入口文件(比如index.php)

2. Functional Suite的基础URL配置问题

functional.suite.yml里的Yii2模块配置是核心,重点对比两个文件的以下参数:

  • modules.config.yii2.url:基础URL是否一致?比如一个配置了http://localhost/api,另一个可能没加/api前缀,导致实际请求的是http://localhost/example/test2,而正确的API路径应该带前缀
  • modules.config.yii2.entryScript:是否都设置了正确的入口文件(比如index.php)?如果其中一个配置遗漏,请求路径可能会出错

3. 应用配置加载的差异

Yii2的功能测试会根据suite配置加载不同的应用配置:

  • 查看两个functional.suite.yml中modules.config.yii2.configFile指向的配置文件是否不同,其中一个可能没正确加载API模块或路由配置
  • 确认测试环境的应用配置里是否启用了api模块,没有的话路由自然无法匹配

4. 测试请求的路径前缀缺失

如果其中一个环境的API有版本前缀(比如/v1),那测试里的请求路径应该是v1/example/test2,而不是直接用example/test2,否则就会返回404:

  • 你可以在测试方法里加一行调试代码,打印实际请求的URL,比如:
    var_dump($I->getLastUrl());
    
    这样就能直观看到请求地址是否符合预期

另外提个小细节:你的测试代码里seeResponseCodeIs(200)的注释写的是Unauthorized,这里有点矛盾——200是成功状态码,Unauthorized对应的是401,不过这和你遇到的404问题无关,只是个小提醒~


内容的提问来源于stack exchange,提问作者Lawrence Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:06:06