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