Рубрики
Без рубрики

Django 2.2.

95% в моем первом веб -сайте Django, созданном вами по -настоящему с помощью этой книги, и что -то пришло, я … Tagged с Python, Django, новичками.

95% в моем первом веб -сайте Django, созданном вами по -настоящему с помощью этого Книга И что -то пришло мне в голову. Тестирование.

Недавно я наткнулся на слова Джейкоб Каплан-Мосс , один из оригинальных создателей Джанго, «код без тестов сломлен, как разработано. «Это поразило меня так, как я знаю себе, что я сосу, что побудило меня научиться тестировать.

«Написание тестов важно, потому что он автоматизирует процесс подтверждения того, что код работает, как и ожидалось». – Джанго для начинающих

Я попробовал два теста, потому что, очевидно, у меня были проблемы с первым, и я получил ошибку:

AssertionError: 301 != 200

Первый тест, который я использовал, был SimpleTestCase . Это подкласс модульный тест. Testcase это добавляет некоторую функциональность

from django.test import SimpleTestCase

class PageTest(SimpleTestCase):

def test_portfolio_page_status_code(self):
    response = self.client.get("/portfolio")
    self.assertEquals(response.status_code, 200)

def test_blog_page_status_code(self):
    response = self.client.get("/blog")
    self.assertEqual(response.status_code, 200)

def test_home_page_status_code(self):
    response = self.client.get("")
    self.assertEquals(response.status_code, 200)

def test_quotes_page_status_code(self):
    response = self.client.get("/quotes/")
    self.assertEquals(response.status_code, 200)

Но след был:

======================================================================
FAIL: test_blog_page_status_code (personal_portfolio.tests.PageTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/user/dir/personal_portfolio/tests.py", line 
11, in test_blog_page_status_code
self.assertEqual(response.status_code, 200)
AssertionError: 301 != 200

======================================================================
FAIL: test_portfolio_page_status_code 
(personal_portfolio.tests.PageTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/user/dir/personal_portfolio/tests.py", line 
7, in test_portfolio_page_status_code
self.assertEquals(response.status_code, 200)
AssertionError: 301 != 200

Я пошел в Stackoverflow, чтобы попросить о помощи, и это то, что я получил:

Вполне вероятно, что ваш сайт действительно возвращается a 301 перенаправить код. Это может произойти по многим причинам, но, например, если это требует аутентификации и перенаправляет некоторую другую страницу для этой цели. Если это так, одно исправление может быть, чтобы добавить тест, который входит в систему, а затем переходит на эту страницу. Без дополнительной информации о том, как работает ваш сайт (и код), трудно определить причину.

Я сказал себе, что должен быть другой способ проверить мой код. Я проверил свое терпение, прочитав статью и наткнулся на TransactionTestCase который наследует от SimpleTestCase Чтобы добавить некоторые функции, специфичные для базы данных.

from django.test import TransactionTestCase

class Personal_PortfolioTests(TransactionTestCase):

        def test_home_page_status_code(self):
        response = self.client.get('/')
        self.assertEqual(response.status_code,200)

        def test_portfolio_page_status_code(self):
        response = self.client.get('/portfolio/')
        self.assertEqual(response.status_code,200)

        def test_quotes_page_status_code(self):
        response = self.client.get('/quotes/')
        self.assertEqual(response.status_code,200)

        def test_blog_page_status_code(self):
        response = self.client.get('/blog/')
        self.assertEqual(response.status_code,200)

И Виола!

Джанго Testcase Класс является более часто используемым подклассом TransactionTestCase Это использует средства транзакции базы данных для ускорения процесса сброса базы данных в известное состояние в начале каждого теста. Однако следствие этого заключается в том, что некоторые поведения базы данных не могут быть проверены в рамках django Testcase учебный класс. Например, вы не можете проверить, что блок кода выполняется в рамках транзакции, как требуется при использовании select_for_update () Анкет В этих случаях вы должны использовать TransactionTestCase Анкет

Подробнее здесь: https://docs.djangoproject.com/en/2.2/topics/testing/tools/#django.test.transactiontestcase

Оригинал: “https://dev.to/highcenburg/django-2-2-test-driven-development-576o”