機能テストスイート(GraphQl APIをテストする)を作成する必要があります。テストスイートは、APIとは別のリポジトリおよびコンテナに配置されます。
私が考えたアプローチの1つは、テストスイート内でBDDフレームワークを使用することです。スイートは、HTTP要求を受信した後、すべてのBDDテストを実行します。
Cucumber.jsをBDDフレームワークとして使用することを検討していました。 npm test
。どのようにテストを実行するのかわかりません。この方法で単体テストフレームワークを使用するのは少し厄介です。このアプローチは理にかなっていますか?
このようなことを行うためのツールは何ですか?さまざまな言語とツールを検討できます。
Karate は、比較的新しいWebサービスのテスト自動化フレームワークであり、2つの特定の機能により、GraphQL応答のテストに適しています
これが良い例です: graphql.feature
以下のスニペット付き:
# you can also read this query from a file
Given text query =
"""
{
pokemon(name: "Pikachu") {
id
number
name
attacks {
special {
name
type
damage
}
}
}
}
"""
And request { query: '#(query)' }
When method post
Then status 200
# json-path makes it easy to focus only on the parts you are interested in
# which is especially useful for graph-ql as responses tend to be heavily nested
* match $.data.pokemon.number == '025'
# the '..' wildcard is useful for traversing deeply nested parts of the json
* def attacks = get[0] response..special
* match attacks contains { name: 'Thunderbolt', type: 'Electric', damage: 55 }
非Javaチームの場合、Karateは バイナリ実行可能ファイル を提供します。これはJREのみを必要とし、Visual Studioコードは IDEとして十分です です。 JavaScriptプログラマーは、空手 JavaScriptランタイムを埋め込む であり、「寛容な」JSONをサポートするため、特にくつろいでいます(二重引用符は不要、JSONキーを引用符で囲む必要はありません)。
編集:これは 雷の話の10分のビデオ これを説明するデモ付きです。
免責事項:ここに開発者。
必要なテストランナーでnpm testを使用できます。私はモカとチャイを使用しています。 Jestは、おそらく最も高度なテストスイートであると考えているため、少し改善されるかもしれません。エンドポイントテストと同様に、テストを作成しました。
it('should be null when user is not logged in', async () => {
const query = `
query {
user(id: "") {
username
email
}
}
`
const rootValue = {};
const context = {};
const result = await graphql(schema, query, rootValue, context);
const { data } = result;
expect(data.user).to.equal(null);
});
それをテストする非常に簡単な方法。また、関連するユーザーをデータベースに挿入するbeforeステートメントを実行します。テストスイートを分離しておくことの問題は、dbに直接アクセスする必要があることです。不要な依存関係を作成するため、テストは他のAPI呼び出しに依存しないでください。そのため、テストが中断した場合、突然根本的な原因を突き止めることは難しくなります。