[英]Setting environment variables inside PHP unit tests
我正在对多年前创建的实用程序函数进行一些基本的单元测试,但它涉及访问$_SERVER
数组。
由于我的单元测试是从命令行运行的,因此我必须自己手动设置数组的值。
这在使用 GitLab Runners 时效果很好,因为在.gitlab-ci.yml
文件中,我只是执行以下操作:
before_script:
- export SERVER_PORT="80"
- export SERVER_NAME="gitlab"
我的测试目前无法测试该函数的所有语句,因为它会检查$_SERVER['SERVER_NAME']
值。
public function testGetEnvironment() {
shell_exec('set SERVER_NAME="localhost"');
$this->assertEquals("localhost", $this->util->get_environment());
shell_exec('set SERVER_NAME="gitlab"');
$this->assertEquals("gitlab", $this->util->get_environment());
}
注意:我必须像在 Windows 机器上一样使用set
,而我们的 GitLab Runner 在 Linux 机器上,所以我在gitlab-ci.yml
文件上使用了export
。
我期待这个测试通过,但似乎使用shell_exec
设置环境变量的命令根本没有改变值。 我仍然从 YAML 文件中定义的值中获取值。
这是失败消息:
1) UtilTest::testGetEnvironment
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'localhost'
+'gitlab'
您执行的任何 shell 命令都将是一个单独的进程,不会影响正在运行的进程。 由于您正在对函数如何使用$_SERVER
变量进行单元测试,因此您无需考虑如何在“真实”场景中设置它的所有麻烦——只需手动修改它并测试您的函数:
public function testGetEnvironment() {
$_SERVER["SERVER_NAME"] = "localhost";
$this->assertEquals("localhost", $this->util->get_environment());
$_SERVER["SERVER_NAME"] = "gitlab";
$this->assertEquals("gitlab", $this->util->get_environment());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.