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

Yii2集成Codeception API测试遇404路由解析错误求助

Yii2集成Codeception API测试404错误排查

问题背景

开发基于Yii2、前端Angular12的项目,本地集成Codeception做API测试时,目标接口在Postman中可正常访问,但测试用例执行后返回404错误,Yii日志提示无法解析请求configuration/user。

现有配置

Api.suite.yml

actor: ApiTester
suite_namespace: \Api
modules:
    # enable helpers as array
    enabled:
        - REST:
            url: http://localhost:4454/meteorwms/backend/web/index.php
            depends: Yii2

CreateUserCest测试用例

<?php

namespace Api;

use \ApiTester;

class CreateUserCest
{
    public function _before(ApiTester $I)
    {
    }

    // tests
    public function tryToTest(ApiTester $I)
    {
    }

    public function createUserViaAPI(ApiTester $I)
    {
        $I->amHttpAuthenticated('admin', '123');
        $I->haveHttpHeader('accept', 'application/json');
        $I->haveHttpHeader('content-type', 'application/json');
        $I->sendGet('?r=configuration/user&expand=roles.permissions,companies,warehouses,adjustmentTypes,defaultCompany,defaultWarehouse&per-page=10&page=1');
        $I->seeResponseCodeIs(200);
        $I->seeResponseIsJson();
        
    }
}

错误信息

Yii日志输出:

[yii\web\HttpException:404] 'yii\base\InvalidRouteException: Unable to resolve the request "configuration/user". in C:\laragon\www\meteorwms\backend\vendor\yiisoft\yii2\base\Module.php:561
Stack trace:
#0 C:\laragon\www\meteorwms\backend\vendor\yiisoft\yii2\web\Application.php(103): yii\base\Module->runAction('configuration/u...', Array)
#1 C:\laragon\www\meteorwms\backend\vendor\codeception\module-yii2\src\Codeception\Lib\Connector\Yii2.php(371): yii\web\Application->handleRequest(Object(yii\web\Request))
#2 C:\laragon\www\meteorwms\backend\vendor\symfony\browser-kit\AbstractBrowser.php(385): Codeception\Lib\Connector\Yii2->doRequest(Object(Symfony\Component\BrowserKit\Request))
#3 C:\laragon\www\meteorwms\backend\vendor\codeception\lib-innerbrowser\src\Codeception\Lib\InnerBrowser.php(243): Symfony\Component\BrowserKit\AbstractBrowser->request('GET', 'http://localhos...', Array, Array, Array, NULL, true)

测试响应内容:Not Found: Page not found.

解决方案

1. 修正REST模块的URL配置

当依赖Yii2模块时,REST模块的url只需设置应用的基础路径,不需要包含index.php——Codeception的Yii2连接器会直接处理路由逻辑,跳过web入口文件。修改Api.suite.yml:

actor: ApiTester
suite_namespace: \Api
modules:
    enabled:
        - REST:
            url: /meteorwms/backend/web/
            depends: Yii2

2. 调整请求路径的写法

使用Yii2模块时,推荐直接用路由语法传递参数,避免手动拼接?r=,两种可选写法:

  • 方式一:直接传入路由和参数数组
$I->sendGet('configuration/user', [
    'expand' => 'roles.permissions,companies,warehouses,adjustmentTypes,defaultCompany,defaultWarehouse',
    'per-page' => 10,
    'page' => 1
]);
  • 方式二:保留查询字符串格式(需配合正确的URL基础路径)
$I->sendGet('', [
    'r' => 'configuration/user',
    'expand' => 'roles.permissions,companies,warehouses,adjustmentTypes,defaultCompany,defaultWarehouse',
    'per-page' => 10,
    'page' => 1
]);

3. 确认Yii2应用的路由与模块配置

检查backend/config/main.php,确保:

  • configuration/user对应的控制器、动作存在
  • 如果configuration是独立模块,已在应用中注册:
'modules' => [
    'configuration' => [
        'class' => 'backend\modules\configuration\ConfigurationModule',
    ],
],

4. 验证测试环境的应用配置

Codeception默认使用测试环境配置(如config/test.php),需确认该配置中的路由规则、模块注册与生产环境完全一致,没有遗漏必要配置项。

内容的提问来源于stack exchange,提问作者Nabeel Siddiqui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 10:34:58