クエリ参照ファイルについて
クエリ参照ファイルは、テストする 1 つのクエリの場所を定義するテキスト ファイルです。
テスト ディレクトリに含まれていないクエリの実行を test run
サブコマンドに指示するときは、クエリ参照ファイルを使います。
テストとして実行するクエリを指定するには、2 つの方法があります。
- クエリ参照ファイルを使って、テストするクエリの場所を指定します。 これは、実際のコードベースの問題を特定することを目的としたアラート クエリとパス クエリのテストを作成する場合に便利です。 テスト コードの複数のディレクトリを作成し、それぞれでクエリの異なる側面を対象にする場合があります。 その後、テスト コードの各ディレクトリにクエリ参照ファイルを追加して、テストするクエリを指定します。
- クエリをテストのディレクトリに直接追加します。
これらは通常、QL ライブラリの動作をテストするためにクエリを明示的に記述する場合に便利です。 多くの場合、これらのクエリにはライブラリ述語の呼び出しが数個だけ含まれ、出力をテストできるようにそれらを
select
ステートメントでラップします。
クエリ参照ファイルを定義する
各クエリ参照ファイル .qlref
には、1 つのクエリを見つける場所を定義する 1 行が含まれています。 場所は、クエリを含む CodeQL パックのルートを基準にして定義されている必要があります。
通常これは、.qlref
を含む CodeQL パック、テスト パックのdependencies
ブロックで指定されている CodeQL パック、または CodeQL パックの推移的な依存関係のいずれかです。
システム間で互換性があるよう、すべてのオペレーティング システムのパスでスラッシュを使う必要があります。
例
JavaScript アラート クエリをテストするためのクエリ参照ファイル: DeadAngularJSEventListener.qlref
javascript/ql/test
の CodeQL パックの qlpack.yml
ファイル (https://github.com/github/codeql/blob/main/javascript/ql/test/qlpack.yml ) では、codeql/javascript-queries
が依存関係として定義されています。 そのため、クエリ参照ファイルでは、codeql/javascript-queries
CodeQL パックを基準にしてクエリの場所を定義します。
AngularJS/DeadAngularJSEventListener.ql
別の例については、「カスタム クエリのテスト」をご覧ください。