2014-10-07 4 views
2

Ниже приведен снимок экрана моего текущего отчета о покрытии.Характеристики модели тестирования Django

enter image description here

Я не уверен, как получить охват 100% для этой модели. Как я могу проверить для строк 13-20? В моем tests_model.py я предположил, создав экземпляр, который будет закрыт. Но это не так.

# Core Django imports 
from django.test import TestCase 

# Third-party app imports 
import nose.tools as noz 
from model_mommy import mommy 
from model_mommy.recipe import Recipe, foreign_key 


# app imports 
from ..models.company import Company 
from testapp.apps.profiles.models.appUserModel import AppUser 

class CompanyModel(TestCase): 
    def setUp(self): 
     self.company = mommy.make(Company) 
     noz.assert_true(isinstance(self.company, Company)) 


    def test_company_user_count_is_0(self): 
     company = mommy.make(Company) 
     noz.assert_equal(company.company_user_count(), 0) 

    def test_company_user_count(self): 
     # Relationship can be one-to-many with users. 
     company = mommy.make(Company) 
     user1, user2 = mommy.make(AppUser, _quantity=2) 
     company.users.add(user1) 
     company.users.add(user2) 
     noz.assert_equal(company.company_user_count(), 2) 


    def test_company_unicode(self): 
     noz.assert_equal(self.company.__unicode__(), self.company.name) 

Я попытался проверить каждый атрибуты ее собственные в том же тестовом файле, например ...

def test_name(self): 
    company = mommy.make(Company, name="Test Name") 
    noz.assert_equal(company.name, "Test Name") 

Но это не имеет никакого воздействия на мой счет покрытия.

на основе замечаний, я также попытался это:

def test_name(self): 
    company = mommy.make(Company) 
    company.name = "Test" 
    company.save() 
    noz.assert_equal(company.name, "Test") 

Но опять же, это не имело никакого влияния на счет.

Это мои настройки для испытаний ...

INSTALLED_APPS += (

    'django_nose', 
    'django_coverage', 
    'django_extensions', 

) 

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' 

NOSE_ARGS = [ 
    '--with-coverage', 
    '--cover-package=testapp.apps.profiles,testapp.apps.referrals', 
    '--cover-html' 

] 

Консоль вывода:

> python manage.py test 
......... 
Name                Stmts Miss Cover Missing 
------------------------------------------------------------------------------------------------ 
testapp.apps.referrals.models          1  1  0% 1 
testapp.apps.referrals.models.company        17  15 12% 1-24, 27 
------------------------------------------------------------------------------------------------ 
TOTAL                136  73 46% 
---------------------------------------------------------------------- 

Каталог:

testapp/ 
     manage.py 
     testapp/ 
       __init__.py 
       apps/ 
        __init__.py 
        referrals/ 
          __init__.py 
          tests/ 
           __init__.py 
           model_tests.py 
+0

Как насчет обновления вашей модели с помощью некоторых фиктивных данных? –

+0

@neo_blackcap вы имеете в виду взять уже созданный экземпляр self.company и обновить каждый атрибут? Просто попробовал, что company.name = «Тест» без какого-либо воздействия на счет извините :) – Prometheus

+0

либо создать, либо обновить в порядке. Я просто думаю, что результат должен быть сохранен в базе данных, а не только в памяти. –

ответ

1

См this issue на django_coverage странице проекта.

Кроме того, обратите внимание на coverage.py official FAQ, в частности, это:

Q: Why do the bodies of functions (or classes) show as executed, 
    but the def lines do not? 

Кажется, что механизм покрытия запускается после ваша модель фактически импортируется.

Try, чтобы вернуться к стандартному сценариюDjango тестирования (с помощью встроенного тестового бегуна) и покрытие выполнения вручную путем выдачи этих команд:

coverage run --source='.' ./manage.py test 
coverage report 
coverage html 

Смотрите, если отчет отличается.

+0

Я обновил OP весь файл. – Prometheus

+0

Отредактировал мой вне- дате ответа с другим подходом к вашей проблеме. – baxeico

+0

Да, сейчас он на 100%! – Prometheus