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
相关产品推荐
相关产品推荐

