我正在浏览文档,但我没有看到任何更改运行测试时使用的工作目录的选项。
我正在使用PhpUnit,因为它包含在Laravel中。我希望能够从项目的根目录运行vendor/bin/phpunit
,并使用/public
目录作为工作目录运行它。
我尝试从/public
运行../vendor/bin/phpunit
,但由于 phpunit.xml 文件不在公共目录中,并且我不想每次都指定我的配置文件路径,这不起作用。
我可以向我的phpunit.xml
文件添加一些内容,以告诉它使用/public
目录作为"cwd"(当前工作目录(运行测试?
根据我在评论和文档中收到的反馈,我确定了以下内容:
- 可能无法更改 phpunit 默认使用的
cwd
(嗯,在 PhpStorm 中是可能的,但不是不编写某种包装脚本的命令行( - 依赖于从特定目录运行的代码不是一个好主意。
我有一个类中的一些代码,如下所示:
$var = file_get_contents("../some_file.json");
这工作正常 - 直到您尝试添加单元测试。Web服务器使用/public
目录作为cwd
运行,而phpunit将使用根目录运行。
与其试图强制phpunit总是使用特定的cwd
(/public
(,我决定最好从依赖于一致cwd
的代码中删除相对路径。所以上面的一行变成了:
$var = file_get_contents(base_path("some_file.json"));
我不想仅仅为了进行一些测试而更改已经有效的生产代码,但这种更改似乎微不足道。(无论如何,这是一个改进(
好吧,你必须在PHP中做实际的chdir
,但是你可以在XML(<phpunit bootstrap="./bootstrap.php">
(中定义一个引导脚本,并让它改变工作目录。
或者,您可以将setUpBeforeClass
函数放入测试类中,以更改工作目录。