在单元测试期间,Symfony未将上传文件移动到正确文件夹中

6l7fqoea  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(98)

我有一个控制器,从窗体中获取图像,并将此图像移动到一个特定的文件夹:
YML配置:

parameters:
    app.logos_directory: "assets/images/logos/"

Controller.php

$logosDirectory = $this->getParameter('app.logos_directory');
$postLogo->move($logosDirectory, $filename);

ControllerTest.php

/** @var FileFormField $logoInputType */
$logoInputType = $form['team[logoFile]'];
$logoInputType->upload(self::$kernel->getProjectDir().'/tests/Fixtures/default.png');

$this->client->submit($form);

使用该应用程序,图像文件被移动到“projectDir/public/assets/images/logo”中
但是当我运行PHPUnit时,文件被移到“projectDir/assets/images/logo”中
我尝试编辑yml配置。我在两种情况下都检查了“%app.logos_directory%”=== assets/images/logos/
我希望symfony在phpunit测试时将我的文件移到public/assets/images/logo中。

hwazgwia

hwazgwia1#

在这两种情况下,都使用相对路径。
使用该应用程序,它是相对于文件'projectDir/public/index.php'的目录构建的
使用PHPUnit时,它必须是文件'projectDir/vendor/phpunit/phpunit/phpunit'的目录,但PHPUnit对chdir('projectDir')也有帮助,因此,当进一步执行脚本时,相对路径是相对于项目目录构建的。
在测试中,还可以使用执行目录交换技巧,如

chdir(self::$kernel->getProjectDir() . '/public');

但是我认为最好改变主代码,使用绝对路径,或者把它包含在参数值中:

parameters:
    app.logos_directory: "%kernel.project_dir%/public/assets/images/logos"

相关问题