2017-03-16 13 views
7

私は、(GraphQ1 APIをテストする)機能テストスイートを書く必要があります。テストスイートは、APIとは別のレポとコンテナに格納されます。GraphQl APIをテストするには?

私が考えたアプローチの1つは、テストスイート内でBDDフレームワークを使用することでした。スイートは、HTTP要求を受信した後、すべてのBDDテストを実行します。

Cucumber.jsをBDDフレームワークとして使用することを検討していました。私はnpm testがあることを知っています。私はどのようにテストを実行するのか分かりません。このようにユニットテストフレームワークを使用するのはちょっと面倒です。このアプローチは理にかなっていますか?

このような処理を行うツールはありますか?私は様々な言語やツールを検討しています。

+0

私は十分な答えを出す経験はありませんが、この投稿は私を助けました。https://medium.com/entria/testing-a-graphql-server-using-jest-4e00d0e4980e#.qohdw3wuz試しましたここで私の実装とキュウリを実装する例ですhttps://github.com/RedLeap/swapi-graphql-module/blob/5da487bf28897aa228d937712dabfd6580cb301d/features/planets.feature - ちょうど私は経験豊富なテスターではない私は、これを未回答のままにするのではなく、私の2セントを与える。ご質問がありましたら、私に教えてください:) –

答えて

1

あなたが望むどんなテストランナーでも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); 
    }); 

かなり簡単にテストできます。 dbに関連するユーザーを挿入する前のステートメントも実行します。テストスイートを別に保つことの問題は、dbに直接アクセスする必要があることです。不要な依存関係を作成するため、テストは他のAPI呼び出しに依存するべきではありません。だから、テストが壊れると突然根本原因が分かりにくい。

0

Karateため2つの特定の機能のGraphQL応答をテストするのに適しであることを起こる比較的新しいウェブサービスのテスト自動化フレームワークである

  • テキスト操作:それは、インラインGraphQLクエリに簡単です。 substitute placeholders
  • JsonPathアサーション:GraphQLレスポンスはJSONですが、リクエスト(固定スキーマなし)に応じて動的に変化し、深くネストされる傾向があります。空手のネイティブJsonPathアサーションは、あなただけが必要なチャンクに集中できるよう、あなたはここで

非常に読みやすいショートカットJSON形式で期待される結果を表現できる良い例です。以下のスニペットとgraphql.feature:空手はJavaランタイムを必要としていても

# 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 } 

は、構文は、言語に依存しているCucumber/Gherkinあり、かつ簡単にあなたの既存の継続的な統合のセットアップに空手のテストとreportsを追加することができます。 JavaScriptプログラマは、空手のembeds a JavaScript runtimeのために自宅で感じることができ、「寛大な」JSON(二重引用符は不要、JSONキーを引用符で囲む必要はありません)をサポートしています。

免責事項:dev here。

関連する問題