2016-09-12 10 views
0

-テスト中にデータベースを(外部から)見ることは可能ですか?私は、テストを書くことをしようとしている

from django.test import TestCase 
from django.test.client import Client 

class MyTests(TestCase): 

    def _create_person_object(self): 
    person = Person(email='[email protected]', password='test') 
    person.save() 
    return 

    def _login(): 
    self.client.post('/login/', {'email': '[email protected]', 'password' : 'test'}) 
    return 

    def setUp(self): 
    self.client = Client() 

    def test_login(self): 
    self._create_person_object() 
    self._login() 
    input('wait and enter') 
    # person = Person.object.get(email ='[email protected]') 
    # self.assertEqual(person.password, 'test') # 

    response = self.client.get('/denied_area/') 
    self.assertEqual(response.status_code, 200) 

UPDATE 私は取引を忘れ、それはテスト中にデータベースを調べることは不可能であるということになります。私は正しい?

+0

私はそうだと思いますが、それを削除します。あなたの問題は、person.passwordがハッシュされているということです。https://docs.djangoproject.com/es/1.10/topics/auth/passwords/ –

+0

あなたは正しいかもしれませんが、パスワードテストでObject Personを作成し、それをチェックしようとしました同じパスワード。だから私はテーブルの中に何が入っているのかを知りたいのですが、なぜ入力を入れたのですか?(待ちと入力) –

+0

パスワード 'test'で作成した後、パスワードがハッシュされずにdjango freaks dbからすべてを削除し、手動で移動して空のdbを表示します。私はそれが起こっていると思う。セ・ダニエル・ローズマンの答え。 –

答えて

-2

テスト用Djangoは古いデータベースを削除して新しいデータベースを作成しようとしています。

テストを実行すると、settings.pyファイルに設定したデータベースを削除し、作成し、マイグレーションを実行し、テストを実行しようとしています。このアプローチのために

私はこのような何かやってお勧めします:あなたはコマンド./manage.py testを実行したときにそれが自動的にあなたのdefault.dbデータベース上でテストを実行します

if any([arg in sys.argv for arg in ['jenkins', 'test']]): 
    DATABASES['default'] = { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(os.path.dirname(__file__), 'default.db'), 
     'TEST_NAME': os.path.join(os.path.dirname(__file__), 'default.db'), 
    } 

    REST_FRAMEWORK = {} 

else: 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.contrib.gis.db.backends.postgis', 
      'NAME': 'your_database_name', 
      'USER': 'database_user', 
      'PASSWORD': 'database_password', 
      'HOST': 'localhost', # or some other host 

     } 
    } 

を。

+0

私は確かに、そのジャンゴは私のデータベースを削除していないことを確認します - それは接頭辞test_で新しいを作成し、各テストでフラッシュし、全体のテスト後にデータベース全体を削除します。もちろん、sqliteをメモリでテストするのは、 )しかし今私はテスト中にテストデータベースを調べる必要があります –

1

はい、アイテムはデータベースに保存されます(ただし、各テストの前にdbがフラッシュされます)。

プレーンテキストのパスワードを保存しているため、エラーが発生していますが、Djangoの認証フレームワークは常にハッシュされたパスワードに対してテストします。あなたはいつもあなたのためのパスワードをハッシュの面倒をcreate_user管理方法を介してユーザーを作成する必要があります。

def _create_person_object(self): 
    Person.objects.create_user('test', email='[email protected]', password='test') 

(あなたが実際にはいないのであれば、あなたは、各関数の最後にreturn文を必要としないことに注意してください値を返しています)。

+0

はい、それはデータベースをフラッシュする必要がありますが、私は以前にそれを壊そうとする - 入力を見て –

+0

そして、私はcreate_userを使用したくない - これはほんの一例です - テスト中にデータベースに保存されているものを調べます –

+1

あなたのコードからは明らかではありませんが、単にプログラムを一時停止するために 'input'を使用しているように見えます。それはトランザクション分離のためにはうまくいかないでしょう。代わりに、テストで 'pdb'を使用してブレークポイントを追加し、そこからモデルを問い合わせます。 –

関連する問題