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

Laravel Dusk集成Lighthouse测试时Schema类型加载失败的问题求助

Laravel Dusk + Lighthouse: "Lighthouse failed while trying to load a type" Error Despite Valid Schema

问题背景

我在Laravel项目中使用Dusk结合Lighthouse进行端到端测试,测试代码示例如下:

class ExampleTest extends DuskTestCase { 
    use DatabaseMigrations; 
    public function testExample() { 
        // 这是用于添加数据的mutation
        $this->graphQL('mutation ...');
        $this->browse(function (Browser $browser) use ($url) { 
            $browser->visit($url);
            // 断言操作...
        }); 
    } 
}

执行测试时,在mutation环节出现如下错误:

Lighthouse failed while trying to load a type: typeFromMySchemaExample 

Make sure the type is present in your schema definition.

我已经做了这些排查但问题依然存在:

  • 执行php artisan lighthouse:validate-schema验证Schema有效性,结果正常;
  • 执行php artisan lighthouse:print-schema确认该类型存在于Schema中;
  • 清理了Laravel和Lighthouse的所有配置缓存。

项目依赖版本:

  • laravel/dusk v6.12.0
  • nuwave/lighthouse v5.2.0
  • phpunit/phpunit v9.5.2

补充:我已经在GraphQL中注释了该类型,但错误仍因schema.graphql中的导入顺序问题持续出现。


解决办法

针对Schema导入顺序导致的问题,你可以尝试以下步骤:

1. 调整Schema文件的导入顺序

Lighthouse加载Schema时是按照导入的先后顺序解析的,如果使用某类型的mutation/query文件被先导入,而定义该类型的文件后导入,就会出现类型找不到的错误。

打开你的主schema.graphql文件,确保定义typeFromMySchemaExample的文件在使用它的文件之前被导入。比如:

# 先导入定义类型的文件
import './types/MyType.graphql'

# 再导入使用该类型的mutation文件
import './mutations/MyMutation.graphql'

2. 清理Lighthouse专属缓存

虽然你清理了Laravel的缓存,但Lighthouse有自己的类型解析缓存,执行这个命令彻底清理:

php artisan lighthouse:clear-cache

清理完成后重新运行测试,很多时候这个操作能解决缓存残留导致的类型加载问题。

3. 在测试类中手动指定Schema加载顺序(极端情况)

如果调整导入顺序后还是无效,可以在测试类的setUp方法里手动指定Schema文件的加载顺序,强制让Lighthouse先加载目标类型:

protected function setUp(): void
{
    parent::setUp();
    
    // 按顺序加载Schema文件,确保类型先被定义
    $this->app['config']->set('lighthouse.schema.register', [
        base_path('graphql/types/MyType.graphql'),
        base_path('graphql/mutations/MyMutation.graphql'),
        // 其他必要的Schema文件...
    ]);
}

4. 检查是否存在重复的类型定义

有时候多个文件中可能重复定义了同名类型,导致Lighthouse解析混乱。执行php artisan lighthouse:print-schema输出完整Schema,搜索typeFromMySchemaExample,检查是否有重复或冲突的定义,如果有,删除多余的定义即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 08:33:13