2015-06-01 15 views
15

Mam prosty test:Korzystając z zasięgu, jak przetestować ten wiersz?

class ModelTests(TestCase): 

    def test_method(self): 
     instance = Activity(title="Test") 
     self.assertEqual(instance.get_approved_member_count(), 0) 

Moim problemem jest to, że zasięg nadal pokazuje get_approved_member_count linię jako nie testowane:

enter image description here

Jak mogę spełniać powyższe pokrycia?

Aby uruchomić testy Używam Django nos Coverage:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' 

NOSE_ARGS = [ 
    '--with-coverage', 
    '--cover-html', 
    '--cover-package=apps.users,apps.activities', 
] 

Console:

raport
python manage.py test 
/Users/user/Documents/workspace/api/env/lib/python3.4/importlib/_bootstrap.py:321: RemovedInDjango19Warning: django.contrib.contenttypes.generic is deprecated and will be removed in Django 1.9. Its contents have been moved to the fields, forms, and admin submodules of django.contrib.contenttypes. 
    return f(*args, **kwds) 

/Users/user/Documents/workspace/api/env/lib/python3.4/importlib/_bootstrap.py:321: RemovedInDjango19Warning: The utilities in django.db.models.loading are deprecated in favor of the new application loading system. 
    return f(*args, **kwds) 

nosetests --with-coverage --cover-html --cover-package=apps.users,apps.activities --verbosity=1 




Name              Stmts Miss Cover Missing 
--------------------------------------------------------------------------------------- 
apps.activities           0  0 100% 
apps.activities.admin         8  8  0% 1-14 
activities.migrations        0  0 100% 
activities.migrations.0001_initial     9  0 100% 
apps.activities.urls          8  0 100% 


etc etc etc 
--------------------------------------------------------------------------------------- 
TOTAL              670 232 65% 
---------------------------------------------------------------------- 
Ran 79 tests in 17.101s 
+0

Sposób, w jaki idziesz, jest właściwy. Jakie są wyniki testu, jeśli bezpośrednio wywołasz ten test? – tjati

+0

@omeinusch test właśnie zwraca liczbę podczas testów to 0 w produkcji to więcej. Zakładam, że powyższe obejmuje go, ale zasięg nadal mówi "get_approved_member_count()' 'nie jest objęty. – Prometheus

+2

Należy opublikować pełne dane wyjściowe konsoli, w tym połączenie i dane wyjściowe podane przez biegacz testowy. – tjati

Odpowiedz

13

Zasięg pokazuje, że metoda jest wywoływana (linia 80 na zielono). Ale pokazuje również, że nigdy nie została zdefiniowana (linia 75 jest czerwona).

Jest to klasyczny problem zbyt późnego rozpoczynania zasięgu. Najprostszym sposobem rozwiązania tego problemu jest użycie pokrycia uruchomić testową biegacza, zamiast używania zawodnik testowy uruchomić zasięg:

$ coverage run -m nose --verbosity=1 

AKTUALIZACJA: do korzystania z oryginalnego polecenia:

$ coverage run manage.py test 

ale w pierwszej kolejności chcesz odinstalować wtyczkę zasięgu nosa.

+3

Potwierdzam, że widziałem to samo zachowanie i rozwiązanie Neda rozwiązało problem dla mnie. Myślałem, że widziałem to udokumentowane w przeszłości (albo w dokumentach pokrycia, albo w dokumentach nosa), ale nie mogę tego teraz znaleźć. – Waylan

+1

Dziękuję za odpowiedź. To ma wiele sensu. Używam Django i biegacza testu Django Nose, czy mam z tym jakieś opcje? – Prometheus

+2

@ OrbiterFleet Zaktualizowałem odpowiedź. –

Powiązane problemy