解决PHPUnit测试中imagecreatefromstring函数未定义的问题
解决单元测试中
imagecreatefromstring()未定义的问题 问题场景
生产环境中,以下代码可正常执行:
imagecreatefromstring($this->imagick->getImageBlob());
但单元测试执行到该行时,抛出错误:
Error: Call to undefined function App\Services\imagecreatefromstring()
相关代码示例
单元测试代码
<?php namespace Tests\Unit\Services; use GDImage; public function testReturnsError() { // Arrange .. some arrangement Storage::shouldReceive('disk') ->with(self::SOURCE_DISK) ->andReturnSelf(); Storage::shouldReceive('path') ->once() ->andReturn('123'); // Act $image = $service->getImage('/path/here'); // Assert ...some assertion }
服务类代码
<?php namespace App\Services; use GdImage; class SomeService { public function getImage(string $filePath): GdImage { try { $decryptedFile = $this->decryptFile(Storage::disk(self::SOURCE_DISK)->path($filePath)); $this->imagick->readImageBlob($decryptedFile); $this->imagick->setImageFormat('png'); return imagecreatefromstring($this->imagick->getImageBlob()); } catch (Exception $ex) { } } }
解决方案
添加全局作用域前缀
错误核心是PHP在App\Services命名空间下调用imagecreatefromstring时,会默认查找该命名空间内的函数,但这个函数是PHP全局GD扩展函数,需加上全局作用域符号\明确调用全局函数:
修改服务类中的代码:return \imagecreatefromstring($this->imagick->getImageBlob());确认测试环境已安装GD扩展
检查测试运行环境是否启用了GD扩展,可在测试代码中临时添加var_dump(extension_loaded('gd'));验证,如果返回false,则需要在测试环境中安装并启用GD扩展。
内容的提问来源于stack exchange,提问作者Cef
相关产品推荐
相关产品推荐

