Laravel项目GitHub Actions中PHPUnit测试报addContext()空指针错误
解决Laravel+PHPUnit在GitHub Actions中出现的
Call to a member function addContext() on null错误 问题描述
在GitHub Actions中运行Laravel项目的PHPUnit测试时,所有测试均抛出错误:Error: Call to a member function addContext() on null。该addContext()并非自定义函数,本次PR仅修改了无关代码,未改动业务代码与测试逻辑,怀疑是版本不兼容或PHPUnit升级导致。
更新:错误堆栈信息
Domain\Customer\Tests\Customer\CustomerControllerRegisteredUserTest::shouldListAsAuthorizedUser Error: Call to a member function addContext() on null /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/inspector-apm/inspector-laravel/src/Providers/ExceptionsServiceProvider.php:56 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/inspector-apm/inspector-laravel/src/Providers/ExceptionsServiceProvider.php:24 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php:458 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php:286 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Events/Dispatcher.php:266 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Log/Logger.php:248 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Log/Logger.php:189 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Log/Logger.php:109 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php:106 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Support/helpers.php:432 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php:102 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php:71 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php:255 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/symfony/deprecation-contracts/function.php:25 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/fakerphp/faker/src/Faker/Generator.php:962 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/src/Domain/Product/Database/Factories/ProductFactory.php:49 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:454 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:433 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:417 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/GuardsAttributes.php:149 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:416 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:400 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:399 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:284 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Relationship.php:59 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:360 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php:240 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:359 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/GuardsAttributes.php:155 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:358 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:346 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Collections/Traits/EnumeratesValues.php:240 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:333 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:291 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/src/Domain/Customer/Tests/Customer/CustomerControllerRegisteredUserTest.php:50 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/tests/Generic/ControllerAsRegisteredUser.php:40 /home/action-runner/actions-runner/_work/myproject/myproject/laravel/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:61
排查解决思路
- 定位问题根源:从堆栈信息可明确,错误出自
inspector-apm/inspector-laravel扩展的ExceptionsServiceProvider.php第56行,说明是Inspector APM的Laravel集成包在调用addContext()时,对应的对象未初始化,返回了null。 - 检查Inspector测试环境配置:测试环境下是否禁用了Inspector?如果
.env.testing中设置了INSPECTOR_ENABLED=false,但扩展仍在执行相关逻辑,就会导致实例为null。需要确保测试环境的Inspector配置完全关闭,或者扩展在禁用状态下不触发相关代码。 - 版本兼容性排查:
- 核对
inspector-apm/inspector-laravel版本与当前Laravel版本的兼容性,查看该包的composer.json要求,比如Laravel 10需要对应版本的Inspector包,版本不匹配会导致初始化失败。 - 检查近期是否升级了PHPUnit或Laravel框架,新版本的框架逻辑可能未被Inspector包适配,从而引发问题。
- 核对
- 临时规避方案:
- 在测试环境中关闭Inspector服务提供者:修改
config/app.php,通过环境变量控制是否注册该服务提供者:// config/app.php $providers = [ // ...其他服务提供者 env('APP_ENV') !== 'testing' ? \Inspector\Laravel\Providers\ExceptionsServiceProvider::class : null, ]; $providers = array_filter($providers); // 过滤空值 - 在测试类的
setUp()方法中手动注销Inspector的异常监听:use Illuminate\Support\Facades\Event; protected function setUp(): void { parent::setUp(); Event::forget('illuminate.log'); }
- 在测试环境中关闭Inspector服务提供者:修改
- 检查依赖变更:查看本次PR是否间接触发了依赖更新(比如composer.lock有改动),导致Inspector包版本变化引入bug。对比PR前后的composer.lock文件,确认相关依赖的版本差异。
- 本地复现验证:在本地测试环境运行相同测试,看是否能复现问题。如果本地正常,说明是GitHub Actions环境的配置问题,比如环境变量未正确设置导致Inspector初始化异常。
内容的提问来源于stack exchange,提问作者netdjw
相关产品推荐
相关产品推荐

