2015-09-21 3 views
-1

Я пишу тестовые примеры для своего проекта, написанные на django, он дает неожиданный вывод, который выглядит как {u'message': u'', u'result': {u'username': u'john', u'user_fname': u'', u'user_lname': u'', u'cur_time': 1442808291000.0, u'dofb': None, u'sex': u'M', u'u_email': u'', u'role': u'', u'session_key': u'xxhhxhhhx', u'mobile': None}, u'error': 0} Здесь мы видим, что другое поле пуст, потому что я только что создал пользователя в тестовых случаях, но не получил другую информацию. база данных создается из производственной базы данных, но не инициализируется, она остается пустой. Именно поэтому он дает другое поле пустым. Он запрашивает пустую базу данных.Как инициализировать тестовую базу данных в django?

Я написал следующий тестовый пример для login REST API. и запускать его на python manage.py test. Пожалуйста, скажите мне, как решить вышеуказанную проблему.

Примечание: Если следующий подход неверен, вы можете предложить другой подход.

from django.test import TestCase 
from django.test.client import Client 
from django.contrib.auth.models import User 
import json 

class TestAPI(TestCase): 

     def setUp(self): 
      self.c=Client() #Create Client object that simulates request to a url similar to a browser can 
      User.objects.create_user(username="john", password="xxx") 

     def test_login_api(self): 
      credential_test=dict() 
      c_test =Client() 

      credential_test["username"]="john" 
      credential_test["password"]="xxx" 
      data=json.dumps(credential_test) 
      #print 'data is' 
      #print data 
      response_test =c_test.put('/api/login', data) 
      content_test=json.loads(response_test.content) 
      print 'content' 
+0

Django test client ожидает, что словарь будет использоваться как postdata, а не json-дамп словаря. И почему вы выполняете аутентификацию с помощью PUT вместо POST? поместите i обычно для загрузки файлов – e4c5

ответ

1

Попробуйте изменить его:

User.objects.create(username="john", password="xxx") 

к:

User.objects.create_user(username='john', password='xxx') 

Метод create_user использование set_password метод.

class UserManager(models.Manager): 
    # ... 
    def create_user(self, username, email=None, password=None): 
     """ 
     Creates and saves a User with the given username, email and password. 
     """ 
     now = timezone.now() 
     if not username: 
      raise ValueError('The given username must be set') 
     email = UserManager.normalize_email(email) 
     user = self.model(username=username, email=email, 
          is_staff=False, is_active=True, is_superuser=False, 
          last_login=now, date_joined=now) 

     user.set_password(password) 
     user.save(using=self._db) 
     return user 
+0

благодаря его работе, но в ответ другие детали пустые, такие как имя пользователя user_first и имя user_last, Thats, почему я пытаюсь инициализировать с производственной базой данных. – geeks

+0

как вы пытаетесь их поймать и где? –

+0

эта таблица пользователей связана с другими таблицами, поэтому для этого она будет пуста, поэтому я хочу инициализировать тестовую базу данных производственной базой данных. – geeks

1

два подхода:

  1. Расширить использование Вами нАлАдкА() для создания записей для других моделей и установить действительный набор отношений между моделями, которые Вы создаете. Это подход, основанный на конфигурации.
  2. Используйте приспособления, чтобы предварительно заполнить тестовый бит. Если вы выполните какое-либо исследование, вы можете узнать, как создать некоторые приборы, используя существующий, действительный db. Однако я бы посоветовал вам санировать любые производственные данные, которые вы используете для тестирования. Ака подход к настройке через данные.
+0

. Тестирование текущего подхода очень медленное. Поэтому я хочу использовать sqlite3 для ускорения Итак, пожалуйста, расскажите, как инициализировать sqlite3 с производственной базой данных ... – geeks

+0

@geeks, который звучит как другой вопрос. Ответ на этот вопрос довольно хорош: http://stackoverflow.com/questions/4606756/how-can-i-specify-a-database-for-django-tests-to-use-instead-of-having-it -build –

+0

да, вы правы, спасибо за ответ .. – geeks

 Смежные вопросы

  • Нет связанных вопросов^_^