【问题标题】:All Dingo routes return 404 when phpunit testingphpunit 测试时所有 Dingo 路由都返回 404
【发布时间】: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 中不返回。

希望这能有所帮助。我还在挖掘这个问题...

【问题讨论】:

    标签: lumen dingo-api


    【解决方案1】:

    所以我通过这样做让我的工作; 使用用于创建问题的示例中的示例:

    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();
        }
    }
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 2020-08-26
      • 2014-07-31
      • 2021-04-24
      • 2013-08-26
      • 2019-10-28
      • 2020-09-08
      • 2015-06-15
      • 2015-07-01
      相关资源
      最近更新 更多