2011-08-19 16 views
15

Django 1.3のテストフレームワーク(TestCase)を使用して、スタティックファイル(つまり、prodではdjango自身ではなく、デバッグ用に提供できるファイル(runserver ))。 しかし、実行した場合Django:静的ファイルのテスト

...私のテストでは404エラーが発生します。 (もちろん、このファイルはrunserverで利用できます)

私の静的ファイルでこのjsonスキーマが存在するかどうかを確認するにはどうすればよいでしょうか? (私の場合、私はまた、生成されたJSON出力に対して、この公開JSONスキーマをテストしたいと思いますので、私は、ファイルの内容を欲しい)これについてどのように

+5

(HTTPS [Djangoは関係なく、あなたの設定の、常に 'DEBUG = false'をしてテストを実行]ので、これが起こります:/ /docs.djangoproject.com/ja/dev/topics/testing/#other-test-conditions)。私はあなたが何をすべきか分からないので、本当の答えを待つ: –

+1

私は 'settings.DEBUG = False'を設定しなければならないシナリオを持っていた。これは 'from django.test.utils import override_settings'で可能で、' @override_settings(DEBUG = True) 'でテストを飾ることができます。[djangoのドキュメント](https://docs.djangoproject.com/ja/1.4/topics/ testing /#overriding-settings) – DMfll

答えて

6

/入力するインポート少なくありますように私は少し簡単に見つける別の方法:

from django.contrib.staticfiles import finders 

result = finders.find('css/base.css') 

静的ファイルが見つかった場合、ファイルへのフルパスが返されます。見つからない場合は、それが返されますNone

出典:

searched_locations = finders.searched_locations 
https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#finders-moduleジャンゴ1.7以上のよう


、あなたはまた、Djangoはファインダモジュールを介して見ている/テストを見つけることができます

Djangoが提供するSimpleTestCase.assertTemplateUsed(response, template_name, msg_prefix='')アサーションに加えて、応答クラスの response.templatesを使用して、レスポンスのレンダリングに使用されたテンプレートのリストを取得することもできます。

出典:https://docs.djangoproject.com/en/dev/topics/testing/tools/#django.test.Response.templates

+0

これは、アップロードされたコンテンツのテストでSuspiciousFileOperationをスローします –

8

from django.contrib.staticfiles import finders 
from django.contrib.staticfiles.storage import staticfiles_storage 

absolute_path = finders.find('somefile.json') 
assert staticfiles_storage.exists(absolute_path) 

これはstaticfilesファインダーを使用しています'somefile.json'というファイルを見つけて、設定したストレージにファイルが実際に存在するかどうかを確認します。

+0

私は望みどおり透明ではありませんが、うまくいくはずです。私はすぐにこれを検証しようとします。 Thx – smad

2

isbadawiコメントとして、テストサーバーは常にDEBUG = Falseで実行されます。したがって、静的ファイルのDEBUG処理に頼ることはできません。テストで見つけ出すためには、明示的にプロダクションのように処理する必要があります。あなたはtestを実行したときのために開発serve()をオンにし、あなたのurls.pyで特別なセクションを持つことができます:

if 'test' in sys.argv: 
    static_url = re.escape(settings.STATIC_URL.lstrip('/')) 
    urlpatterns += patterns('', 
     url(r'^%s(?P<path>.*)$' % static_url, 'django.views.static.serve', { 
      'document_root': settings.STATIC_ROOT, 
     }), 
    ) 
関連する問題