如何使用phpunit测试位于symfony中Web文件夹中的静态文件?

sysinfo:

> PHPUnit 5.7.4
> PHP 7.0.13
> Symfony 3.2.1

我正在尝试点击“下载”页面上的链接,并验证文件是否可下载,但是当我点击链接$client-> click($crawlerDownload-> link());我得到一个404.symfony $client是否不可能访问web目录中的静态文件?我该如何测试?

Favicon测试是测试用例的简化版本.

public function testPressDownload()
{
    $client = static::createClient();
    $client->followRedirects(false);

    //create fixture file
    $kernelDir = $client->getKernel()->getRootDir();
    $file = "${kernelDir}/../web/download/example.zip";
    file_put_contents($file, "dummy content");


    $crawler = $client->request('GET', '/files');
    $this->assertEquals(200, $client->getResponse()->getStatusCode()); //ok

    $crawlerDownload = $crawler
        ->filter('a[title="example.zip"]')
    ;
    $this->assertEquals(1, $crawlerDownload->count()); //ok


    $client->click($crawlerDownload->link());
    $this->assertEquals(200, $client->getResponse()->getStatusCode()); //fails 404
}


public function testFavicon()
{    
    $crawler = $client->request('GET', '/favicon.ico');
    $this->assertEquals(200, $client->getResponse()->getStatusCode()); //fails 404
}

解决方法:

您不能,测试正在引导应用程序,它不是“真实的Web服务器”,因此当请求/favicon.ico时,它将在应用程序中搜索与该路径相对应的路由,但找不到该路由.

要验证这一点,请创建一条伪路线:

/**
 * @Route("/favicon.ico", name="fake_favicon_route")
 *
 * @return Response
 */

您将看到测试现在可以通过.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...