代码之家  ›  专栏  ›  技术社区  ›  Erik Baars

silex中匿名回调路由的单元测试

  •  1
  • Erik Baars  · 技术社区  · 8 年前

    我正在通过phpunit单元测试接近100%的代码覆盖率,但我目前唯一没有涉及的是路由。我不确定如何测试它。有人能帮忙吗?

    我使用Silex框架以以下方式进行路由:

    $api->put('/update/{websiteName}/{endpointName}', function($websiteName, $endpointName, Request $request) use ($databaseServiceContainer, $sourceRetrievalService) {
        $controller = new RequestController(
            $databaseServiceContainer, 
            $sourceRetrievalService
        );
    
        return $controller->update(
            $websiteName, 
            $endpointName, 
            $request
        );
    });
    

    如图所示:

    As you can see within this image.

    https://github.com/ri0t1985/api-creator

    2 回复  |  直到 8 年前
        1
  •  1
  •   Anton Pelykh    8 年前

    但是,如果您真的想通过单元测试涵盖路由器配置,您可以使用这种方法:

    // ...
    
    $path = '/foo';
    
    $app = new Application();
    $app->get($path, function () {
        return 'foo';
    });
    
    $request = Request::create($path, 'GET');
    $response = $app->handle($request);
    
    $this->assertEquals('foo', $response->getContent());
    // ...
    

    寻找 your implementation on github ,受抚养人来自DI。这将很难支持,因此考虑如何使这个类更易于测试是有意义的。

        2
  •  0
  •   Adam Cameron    8 年前

    老实说,这些路由定义中没有“移动部分”,因此它们实际上不需要单元测试覆盖率。只要把 @codeCoverageIgnore

    https://silex.symfony.com/doc/2.0/testing.html#webtestcase )测试实际的请求行为。

    更新: 可能是为了更清楚地说明这一点。。。考虑一下,如果您使用YAML配置路由,而不是对其进行编码(无论如何,这可能是一个好主意),那么您不会试图对YAML进行单元测试,对吗?不,因为那太愚蠢了。您可以通过WebTestCase对请求本身进行功能测试。这同样适用于在代码中完成路由配置的情况。

    推荐文章