You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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');
      }
      
  • 检查依赖变更:查看本次PR是否间接触发了依赖更新(比如composer.lock有改动),导致Inspector包版本变化引入bug。对比PR前后的composer.lock文件,确认相关依赖的版本差异。
  • 本地复现验证:在本地测试环境运行相同测试,看是否能复现问题。如果本地正常,说明是GitHub Actions环境的配置问题,比如环境变量未正确设置导致Inspector初始化异常。

内容的提问来源于stack exchange,提问作者netdjw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 02:36:02