2017-08-03 9 views
0

現在、私はWebサーバーAPIを構築するためにグラフェンを使用しています。私はしばらくの間Django-Rest-Frameworkを使用していて、何か違うものを試してみたいと思っています。Graphene-Djangoのテスト

私は私の既存のプロジェクトでそれを配線すると、私は今

{ 
    industry(id:10) { 
     name 
     description 
    } 
} 

のようなものを入力して、Graphiql UIからクエリをテストする方法を考え出した、私はユニットによってカバーされ、新たなAPIを持つようにしたいです/統合テスト。そしてここで問題が始まります。私は、グラフェン上のテストクエリ/実行時にチェックしています

すべてのドキュメント/ポストは

result = schema.execute("{industry(id:10){name, description}}") 
assertEqual(result, {"data": {"industry": {"name": "Technology", "description": "blab"}}} 

のようなものをやっている私のポイントは、(内部クエリが実行されることである)だけ大きなテキストの塊とIドンであります私はそれを将来どのように維持できるかを知っている。私または将来の他の開発者は、そのテキストを読んで、それが意味するものを見つけ出し、必要に応じて更新する必要があります。

このようになっているのでしょうか?グラフェンの単体テストはどうやって書いていますか?

答えて

1

私は、クエリのテキストブロックが大きいテストを書いてきましたが、GraphiQLの大きなテキストブロックに貼り付けるのは簡単でした。そして、私はRequestFactoryを使ってクエリと一緒にユーザーを送信できるようにしています。 「」の年代({ user { id firstName } })のセット間の

from django.test import RequestFactory, TestCase 
from graphene.test import Client 

def execute_test_client_api_query(api_query, user=None, variable_values=None, **kwargs): 
    """ 
    Returns the results of executing a graphQL query using the graphene test client. This is a helper method for our tests 
    """ 
    request_factory = RequestFactory() 
    context_value = request_factory.get('/api/') 
    context_value.user = user 
    client = Client(schema) 
    executed = client.execute(api_query, context_value=context_value, variable_values=variable_values, **kwargs) 
    return executed 

class APITest(TestCase): 
    def test_accounts_queries(self): 
     # This is the test method. 
     # Let's assume that there's a user object "my_test_user" that was already setup 
     query = ''' 
{ 
    user { 
    id 
    firstName 
    } 
} 
''' 
     executed = execute_test_client_api_query(query, my_test_user) 
     data = executed.get('data') 
     self.assertEqual(data['user']['firstName'], my_test_user.first_name) 
     ...more tests etc. etc. 

すべてはただ、必要に応じて、それが簡単に更新できるようになりGraphiQL、からで貼り付けられます。テストが失敗するような変更を加えた場合、自分のコードのクエリをGraphQLに貼り付けることができます。また、クエリを修正して新しいクエリをコードに貼り付けることがよくあります。この繰り返し貼り付けを容易にするために、貼り付けられたこのクエリには意図的にタブがありません。

関連する問題