【发布时间】:2018-04-06 04:37:10
【问题描述】:
原帖于https://github.com/dingo/api/issues/1472
我正在使用 Lumen 5.1 和 DingoApi 1.0.x 进行 api 开发,现在我正在尝试进行一些验收测试。按照 Lumen 的文档,我是这样做的:
这是app\Http\routes.php 中的简化路由定义:
$app->get('/', function () use ($app) {
return "Welcome to mysite.com";
});
$api = app('Dingo\Api\Routing\Router');
$api->version('v1', function ($api) {
$api->group([
'prefix' => 'dealer',
'middleware' => 'checkH5ApiSign'
], function ($api) {
$api->get('list', 'App\Http\Controllers\Credit\DealerController@index');
$api->get('staff_list', 'App\Http\Controllers\Credit\DealerController@getStaffList');
});
}
我可以在浏览器中或通过邮递员访问使用$app 或$api(dingo) 定义的两条路线,它们都可以返回 200 响应。但是,每当我尝试在 phpunit 中访问这些路由时,$app 定义的路由(如/)对 200 代码的响应正常,但所有用$api(dingo) 定义的路由都会以 404 状态代码响应。这是我的测试代码:
class DealerTest extends TestCase
{
public function testTest()
{
$this->get('/')->assertResponseOk();
$this->get('/dealer/list')->assertResponseOk();
$this->get('/dealer/staff_list')->assertResponseOk();
}
}
并运行结果:
PHPUnit 5.7.5 by Sebastian Bergmann and contributors.
F 1 / 1 (100%)
Time: 590 ms, Memory: 6.00MB
There was 1 failure:
1) DealerTest::testTest
Expected status code 200, got 404.
Failed asserting that false is true.
E:\Gitrepos\api.fin.youxinjinrong.com\vendor\laravel\lumen-framework\src\Testing\AssertionsTrait.php:19
E:\Gitrepos\api.fin.youxinjinrong.com\tests\DealerTest.php:8
FAILURES!
Tests: 1, Assertions: 2, Failures: 1.
我尝试通过Dingo包代码查找原因,但失败了。所有其他相关问题也无法解决我的问题。所以请帮助我。
更新
我按照代码流程,看到FastRoute\DataGenerator\RegexBasedAbstract.php 正在执行addRoute() 操作,我在addRoute() 方法中转储了$this->staticRoutes),看到它在浏览器内部和phpunit 下都运行良好。但奇怪的是,->getData() 的以下调用表现不同:在浏览器中返回所有静态路由,但在 phpunit 中不返回。
希望这能有所帮助。我还在挖掘这个问题...
【问题讨论】: