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
相关产品推荐
相关产品推荐

