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”