2016-08-04 2 views
1

バックエンドがDjango RESTフレームワークを使用して実装されているWebアプリケーションを構築しました。今は単体テストを書いていますが、私はシリアライザのメソッドをテストする際に問題に遭遇しました。ここで私はに苦しんだシリアライザ方法の一例は次のとおりです。Django REST Framework - シリアライザテストでリクエストを設定しますか?

def get_can_edit(self, obj): 
     request = self.context.get('request') 
     user = User.objects.get(username=request.user) 
     return user == obj.admin 

テストからこれを呼び出そうとすると、最初に私は、シリアライザのインス​​タンスを宣言:

self.serializer = ConferenceSerializer() 

しかし、今、私は必要get_can_editself.context.get('request')の場合は、self.serializerに正しい要求があります。私はRequestFactoryを使用して、正しい情報と偽物の要求を作成しました:私はself.context.get('request')request1を返しますようserializerrequest1を追加する方法がわからないですので

self.request1 = RequestFactory().get('./fake_path') 
self.request1.user = self.user1 

は、今私はこだわっています。

ありがとうございました。

答えて

4

あなたのテストでシリアライザをインスタンス化しながら、シリアライザのcontextrequest1を追加するパスにcontext引数を必要としています。 DRFのドキュメントから

including extra context:にあなたはシリアライザをインスタンス化する際にcontext 引数を渡すことで、任意の追加のコンテキストを提供することができます。

あなたのような何かをする必要があります。

# pass context argument 
self.serializer = ConferenceSerializer(context={'request': request1}) 

これはそのcontextであなたのシリアライザに希望request1オブジェクトを提供します。

+0

これは機能しました - ありがとうございました! – Tom

関連する問題