2016-05-16 2 views
2

私が作業しているdjango Webプロジェクトで枯渇しましたが、私は答えが見つからないようです。 私はこのような単純なビューをテストしようとしている:Django JsonResponseがapplication/jsonの代わりにcontent-type text/htmlを返す

def list(request): 
    return JsonResponse({"foo": "bar"}) 

すべてが順調に実行するようです。ブラウザでサイトを開き、ページ情報を確認すると「タイプ:application/json」と表示されます。

しかし、私はトラヴィスのCI上で次のテストを実行する場合:

def setUpTestData(cls): 
    cls.client = Client() 
    #A few lines of setting up test-data 

def test_content_type(self): 
    response = self.client.get('/api/list') 
    self.assertEqual(response['content-type'], 'application/json') 

を私は失敗し、次の取得:

FAIL: test_content_type (researchlibrary.api.tests.test_list.ListTests) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/travis/build/FUB-HCC/ACE-Research-Library/researchlibrary/api/tests/test_list.py", line 25, in test_content_type 
    self.assertEqual(response['content-type'], 'application/json') 
AssertionError: 'text/html' != 'application/json' 
- text/html 
+ application/json 

は、URLは、すべての罰金です。テストで正しいページが返されますが、application/jsonの代わりにtext/htmlのように見えますが、なぜそれがあるのか​​わかりません。

これはなぜですか?

EDIT:self.client.get( '/ api/list')をself.client.get( '/ api/list /')に変更すると問題が解決しました。

+5

私はあなたが応答の内容をチェックするべきだと思います。通常のレスポンスの代わりにエラーページが表示される可能性があります。 –

+0

@ LudwikTrammerそうです。 'localhost/api/list'というアドレスを入力すると、正しい応答が返されますが、何とかテストではそうではないようです。私は 'self.client.get( '/ api/list /')'に変更しようとしました。ありがとう:D私は今、愚かな気分になります^^ – Helliaca

+1

@ LudwikTrammerあなたは答えとしてそれを作成する必要があります。 – cwallenpoole

答えて

1

self.client.get('/api/list') 

がエラーページ(したがって、テキスト/ HTMLのCONTENT_TYPE)につながったことが表示されます。

EDIT:LudwikTrammerによると、エラーページではなくhttpリダイレクトされます。

self.client.get('/api/list/') 

self.client.get('/api/list') 

を変更

は、問題を解決しました。

関連する問題