Как выполнить модульное тестирование Django - повторно использовать данные из 1 базы данных через 1 класс - PullRequest
0 голосов
/ 27 апреля 2019

Как вы можете видеть в setUpClass, мы определяем пользователя и профиль.

Когда вы смотрите на метод:

test_create_project

Все работает нормально и тест успешно пройден. Идея в том, что проект и позиция были созданы с помощью этого метода, я хотел бы использовать его из БД в методе:

test_homepage

Проблема в том, что когда вы пытаетесь прочитать их из БД, они больше не существуют. У меня вопрос почему. Я знаю, если я создам проект в

setUpClass

тогда это будет в БД. Моя цель не в том, чтобы создать дополнительный Проект и Позицию, если я могу создать его с помощью этого метода 1-го - протестировать его, а затем повторно использовать в следующем - но не с помощью (self), а путем чтения из БД.

Question1:

Is that possible?

Вопрос2:

Are methods in this class using separated DBes?

Question3:

What is the most efficient - and proper approach to this - my point is not to create extra records and reuse data as we go.

Они выходят пустыми в методе test_homepage:

    print(project)
    print(positions)

Django 2.2 Тесты:

from django.contrib.auth.models import User
from django.test import TestCase
from django.utils import timezone

from stb.core.models import Profile, Skill, Project, Position

class EntireAppTest(TestCase):

    """Updating Profile"""

    @classmethod
    def setUpClass(cls):
        """Creating User"""
        super().setUpClass()
        cls.user = User.objects.create_user(
            username='johnconnor',
            email='dude@nasa.gov',
            password='terminator'
        )
        cls.profile = Profile.objects.get(user=cls.user)
        skill = Skill()
        skill.save()
        skill.profile.add(cls.profile.id)
        skill.title='python'
        skill.save()

    def setUp(self):
        self.client.login(username='johnconnor', password='terminator')


    def test_create_account(self):
        self.user = User.objects.get(email='dude@nasa.gov')
        self.assertEqual(User.objects.count(), 1)
        self.assertEqual(self.user.username, 'johnconnor')
        self.assertEqual(self.user.email, 'dude@nasa.gov')


    def test_create_profile(self):
        self.profile = Profile.objects.get(user=self.user)
        now = timezone.now()
        self.assertLess(self.profile.pub_date, now)

    def test_create_project(self):
        url = '/project/new/'
        response = self.client.post(
            url,
            data={
                'profile': self.profile,
                'title': 'NASA JPL',
                'position_formset-TOTAL_FORMS': 1,
                'position_formset-INITIAL_FORMS': 0,
                'position_formset-0-title': 'Python Developer',
                'position_formset-0-description': 'description',
            },
        )
        project = Project.objects.get(id=1)
        position = Position.objects.get(project=project)
        self.assertEqual(response.status_code, 302)
        self.assertEqual(project.title, 'NASA JPL')
        self.assertEqual(position.title, 'Python Developer')

    def test_homepage(self):
        url = '/'
        response = self.client.get(
            url,
            data={},
        )
        positions = Position.objects.all()
        project = Project.objects.all()
        print(project)
        print(positions)
        # print(response.context)
        self.assertEqual(response.status_code, 200)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...