Unit testing PHPUnit:如何在助手文件中测试单个函数

Unit testing PHPUnit:如何在助手文件中测试单个函数,unit-testing,testing,mocking,phpunit,Unit Testing,Testing,Mocking,Phpunit,我想在助手文件中测试一个新函数 function isProductionSite() { return !(bool) preg_match('/admin|development/', request()->getHttpHost()); } 当我在测试函数中调用这个函数时,我得到了我的本地地址。因此,我尝试模拟request()->getHttpHost public function testIsProductionSiteExpectFalse(): void {

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

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。但是要测试的函数(isProductionSite()中的getHttpHost()为我提供了正确的主机


如何在testcase中设置HttpHost,以便helper函数输出被操纵的主机?

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


依赖项应始终传递给helper函数。只需添加
$request
作为
iProductionSite

的参数,谢谢您的回答和建议!很高兴答案有用。如果你认为答案解决了问题,记得将其标记为已接受。