2016-05-29 2 views

答えて

0

ええセットアップ の設定を上書きすることができ、テストのために実際のデータベースを設定し、データベースの備品をロード..しかし、私が思うに、あなたがあなたのを修正することなく、あなたのテストを実行するために、良いpraticeではなくそれは `s "本当の" app env。

あなたはpytest-djangoを試してください。

このライブラリでは、再利用することができます、あなたのデータベーステストを削除します。

2

私はEderson Badecaと思うのですが、test_dbとしてproject_dbを使用しないでください。代わりに、私は現在のproject_dbのコピーをデータベースセットアップで作成し、その代わりにテストを実行することを提案します。 djangoテストでは、カスタムテストランナーを作成する必要があります。しかし、py.testには、db setup/teardownロジックをすべて行うdbというフィクスチャがあります。だから、あなたが望むことをするカスタムdb fixtureを作成する必要があります。ここにデフォルトのdbフィクスチャのソースがあります。 https://github.com/pytest-dev/pytest-django/blob/master/pytest_django/db_reuse.py

P.S.まだproject_dbでtestを実行したい場合。

は私だけのカスタムランナー怒鳴るとDjangoのデフォルトのテストでこれをやった

# coding: utf-8 

from __future__ import unicode_literals, absolute_import 

from django.conf import settings 
from django.core.exceptions import ImproperlyConfigured 
from django.core.management import call_command 
from django.db import connection 
from django.test.runner import DiscoverRunner, setup_databases 
from django.test.testcases import connections_support_transactions 

# configure(default_settings=settings, 
settings.DEBUG = True 
settings.TEMPLATE_DEBUG = True 


class KeepDatabaseTestRunner(DiscoverRunner): 
    """ 
    Skips creating test database and uses default database for tests. 
    """ 

    def setup_databases(self, **kwargs): 
     """Setups databases to run and migrate on settings.DATABASES['default']['TEST']['NAME']""" 
     old_name = settings.DATABASES['default']['NAME'] 
     try: 
      test_name = settings.DATABASES['default']['TEST']['NAME'] 
     except KeyError: 
      raise ImproperlyConfigured("TEST NAME is not defined in settings.DATABASES['default']") 
     connection.settings_dict["NAME"] = test_name 
     connection.settings_dict['SUPPORTS_TRANSACTIONS'] = connections_support_transactions() 
     call_command('syncdb') 
     call_command('migrate') 
     return [connection, old_name, False], [] 

    def teardown_databases(self, old_config, **kwargs): 
     """Will not do anything""" 
     pass 

アップデートを(Djangoのバージョン1.6、他のバージョンでテストしていません)

[OK]を、ここにありますどのようにそれを行うことができたかの基本的な考え。まず、デフォルト値db fixitureを完全にovreloadする必要があります。あなたが探しているコード行はhttps://github.com/pytest-dev/pytest-django/blob/master/pytest_django/fixtures.py#L39です。これは、py.testが、_get_test_db_nameを割り当てるtest_dbの名前であるところです。したがって、基本的にカスタム_get_test_db_nameを作成する必要があり、その中にproject_dbのパスを指定する必要があります。その後、テストを実行するときに--reuse-dbを使用する必要があります。

P.S. test_dbをproject_dbのダンプで埋めることもできます。その後、--reuse-dbを使って実行テストを行い、py.testはtest_dbにある最新のproject_dbバージョンに対してテストを実行します。

+0

ええ、助けてくれてありがとう、私は同様のコードを見て、py.testでも可能だろうと推測しましたが、例を見つけたり、自分自身を動作させることはできません。py.testコードは難しい読む。 – eugene

+0

@eugene read update、それはあなたの問題に役立つかもしれません –

関連する問題