原始发布在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()
操作,我在$this->staticRoutes)
方法中转储了addRoute()
,看到它在内部都正常浏览器和phpunit下。但奇怪的是,->getData()
的以下调用表现不同:在浏览器中返回所有静态路由,但不在phpunit中。
希望这可以以某种方式有所帮助。我还在挖这个问题...
答案 0 :(得分:2)
这样我就可以工作了; 使用创建问题的示例中的示例:
class DealerTest extends TestCase
{
public function testTest()
{
$this->get('/')->assertResponseOk();
$this->get('/dealer/list')->assertResponseOk();
$this->get('/dealer/staff_list')->assertResponseOk();
}
}
成为
class DealerTest extends TestCase
{
public function testTest()
{
$this->get(getenv('API_DOMAIN') . '/v1/')->assertResponseOk();
$this->get(getenv('API_DOMAIN') . '/v1/dealer/list')->assertResponseOk();
$this->get(getenv('API_DOMAIN') . '/v1/dealer/staff_list')->assertResponseOk();
}
}
我希望这对您有帮助