تست صفحۀ اصلی

سلام

منظور از تست این است که چک کنیم که برنامه‌نویسیِ تمام صفحات درست باشد و کد ۲۰۰ را در خروجی ارائه دهد. برای این کار درون فولدر بورد، فایلی با نام py می سازیم.

from django.core.urlresolvers import reverse
from django.test import TestCase

class HomeTests(TestCase):
    def test_home_view_status_code(self):
        url = reverse('home')
        response = self.client.get(url)
        self.assertEquals(response.status_code, 200)

اگر در خروجیِ Status Code مقدار ۲۰۰ را چاپ کرد یعنی همه چیز درست است!

اگر به هر دلیلی مشکلی در کدزنی وجود داشته باشد؛ کد ۵۰۰ چاپ می شود که بیانگر Internal Server Error است. فرض کنیم که برنامۀ ما دارای تعداد ۱۰۰ ویوی مختلف است و با این کار می توانیم در یک مرحله تمام صفحات را تست کنیم و ببینیم که آیا تمام آن‌ها درست کار می کنند یا خیر… برای اجرای آن دستور زیر را وارد می کنیم:

python manage.py test

و خروجی زیر چاپ می شود:

Creating test database for alias 'default'...
System check identified no issues (0 silenced).
.
-------------------------------------------------------
Ran 1 test in 0.041s
OK
Destroying test database for alias 'default'...

یکی دیگر از فواید تست مربوط به این است که آیا URLها به درستی کار می‌کنند یا خیر. در ادامه خواهیم دید که ماژول py می تواند بسیار بزرگ و پیچیده باشد. تنظیمات URLها تمام مربوط به ریجکس‌ها (regex) است.

برای اینکار فایل boards/tests.py را به شکل زیر تغییر می دهیم.

from django.core.urlresolvers import reverse
from django.urls import resolve
from django.test import TestCase
from .views import home

class HomeTests(TestCase):
    def test_home_view_status_code(self):
        url = reverse('home')
        response = self.client.get(url)
        self.assertEquals(response.status_code, 200)

    def test_home_url_resolves_home_view(self):
        view = resolve('/')
        self.assertEquals(view.func, home)

در این فایل از تابع resolves استفاده شده است. جنگو از این تابع برای چک آدرس‌های استفاده‌شده در فایل urls.py استفاده می کند. این تابع مطمئن می شود که آدرسِ / یا همان آدرس ریشه مربوط به ویوی home می‌شود.

دوباره تست می کنیم:

python manage.py test
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
..
--------------------------------------------------
Ran 2 tests in 0.027s
OK
Destroying test database for alias 'default'...

برای مشاهدۀ جزئیات بیشتر می‌توانیم آن را با ویژگیِ verbosity اجرا کنیم:

python manage.py test --verbosity=2

خروجی:

Creating test database for alias 'default' ('file:memorydb_default?mode=memory&cache=shared')...
Operations to perform:
  Synchronize unmigrated apps: messages, staticfiles
  Apply all migrations: admin, auth, boards, contenttypes, sessions
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying boards.0001_initial... OK
  Applying sessions.0001_initial... OK
System check identified no issues (0 silenced).
test_home_url_resolves_home_view (boards.tests.HomeTests) ... ok
test_home_view_status_code (boards.tests.HomeTests) ... ok
-------------------------------------------------------
Ran 2 tests in 0.017s
OK
Destroying test database for alias 'default' ('file:memorydb_default?mode=memory&cache=shared')...

ترجمۀ اختصاصی توسط تمدن

 

مطلب بعدی: تنظیمات فایل های استاتیک 

مطلب قبلی: تنظیمات Django Template Engine Setup

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگو شرکت کنید؟
نظری بدهید!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *