PHPUnit:如何在 Helper 文件中测试单个函数

Posted

技术标签:

【中文标题】PHPUnit:如何在 Helper 文件中测试单个函数【英文标题】:PHPUnit: How to Test a single Function in an Helper file 【发布时间】:2021-07-25 17:55:15 【问题描述】:

我想在帮助文件中测试一个新函数。

function isProductionSite() 
    return !(bool) preg_match('/admin|development/', request()->getHttpHost());

当我在我的测试函数中调用这个函数时,我得到了我的本地地址。因此我试图模拟 request()->getHttpHost.

public function testIsProductionSiteExpectFalse(): void

    $request = Mockery::mock(Request::class);
    $request->shouldReceive('getHttpHost')->once()->andReturn('admin.mydomain.de');
    $this->assertFalse(isProductionSite());

在 Tets 函数中,$request->getHttpHost() 现在将输出 admin.mydomain.de。但是要测试的函数中的 getHttpHost() (isProductionSite()) 为我提供了正确的主机。

如何在测试用例中设置 HttpHost,以便帮助函数输出被操纵的主机?

【问题讨论】:

【参考方案1】:

您正在模拟 $request 的实例,但被测函数使用的实例不是模拟,而可能是一个全局变量。

应始终将依赖项传递给辅助函数。只需将$request 添加为isProductionSite 的参数即可。

【讨论】:

感谢您的回答和好建议! 很高兴这个答案很有用。如果您认为答案解决了问题,请记住将答案标记为已接受。

以上是关于PHPUnit:如何在 Helper 文件中测试单个函数的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHPUnit / Laravel 中模拟 JSON 文件

如何重用 PHPUnit 函数

如何使用 laravel 和 phpunit 测试文件上传?

如何运行我所有的 PHPUnit 测试?

如何使用phpunit在具有动态URI的laravel中测试REST api

如何使用 phpunit 在 Laravel 4 中测试命名空间对象