Nie jestem pewien, jak testowanie widoku jest trudne.
Po prostu używasz test client.
Kod zasięgu jest łatwy. Wyjaśniasz, w jaki sposób żądanie adresu URL odwzorowuje ścieżkę kodu i tworzy odpowiednie żądania URL.
Możesz, jeśli chcesz, wywołać funkcje widoku "ręcznie", tworząc obiekt żądania i badając obiekt odpowiedzi, ale to za dużo pracy.
Jeśli masz wątpliwości co do zasięgu swojego kodu, to dobrze. Oznacza to, że masz kod, którego nie możesz łatwo zmapować do adresu URL (który jest wszystkim, co może zobaczyć użytkownik aplikacji internetowej). Jeśli masz kod, który nie jest mapowany na adres URL, prawdopodobnie powinieneś (a) usunąć kod lub (b) przekształcić go w osobny moduł.
Mamy wiele modułów poza naszymi funkcjami widoku. Nasze funkcje widoku importują te moduły. Testujemy te moduły "poza funkcją widoku" zwykłymi unittestami.
Oto typowa struktura.
some_big_product/
|-- __init__.py
|-- settings.py
|-- urls.py
|-- logging.ini
|-- other_global_files.py
|-- an_app_1/
| |-- __init__.py
| |-- urls.py
| |-- models.py
| |-- views.py
| |-- tests.py <-- the generic Django testing
| |-- app_specific_module.py
| |-- app_specific_package/
| | |-- __init__.py
| |-- test_app_specific_module.py <-- unittest
| |-- test_app_specific_package.py
|-- generic_module.py
|-- generic_package/
| |-- __init__.py
|-- tests/
| |-- test_this.py
| |-- test_that.py
| |-- test_all.py <-- not always practical
|-- scripts/
|-- run_tests.sh
Hmm, to może odpowiedzieć na inne pytanie, które mam. Jak zarządzać strukturą katalogów podczas dodawania innych modułów w hierarchii projektu/aplikacji django? –
Dzięki! To bardzo pomaga. –
Jak działa test_all.py? Zakładam, że chciałbym umieścić wszystko w jednym dużym TestCase.TestSuite, a następnie uruchomić. W ten sposób wszystkie statystyki testów (podania i niepowodzenia) są agregowane na końcu na końcu. Nie mogę się zdecydować, czy powinienem dostosować program Django do "testu manage.py", aby uruchomić dodatkowe unittests, czy też napisać swój własny tester najwyższego poziomu, który zawiera testy jednostkowe Django. –