goroutine
使用ケース
- リゾルバーでの通知や外部API呼び出しの非同期処理
- バックグラウンドプロセスを待たずにユーザーにレスポンスを返す
テストの問題
- 本番環境(PostgreSQL): 複数のgoroutineが1つのコネクションにアクセスしても問題なし
- テスト環境(SQLiteインメモリDB): 不安定なデッドロックが発生
テストのソリューション
goroutineを使用するリゾルバーをテストする場合、SQLiteのデッドロックを避けるためDBコネクションを1に制限。
実装例
- goroutineを使用するテストケース用にテストファクトリーで単一コネクションを設定
- 参照:
internal/utils/test/factory/factory.go#L26
実装例
- リゾルバーでのgoroutine使用:
internal/adapters/graph/user_report_user.resolvers.go#L82