2014-10-07 10 views
2

다음은 현재 사용중인 coverage.py 보고서의 스크린 샷입니다.장고 테스트 모델 속성

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") 

그러나 다시,이 점수에 영향을 미치지 않았다.

> 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 = "Test"점수에 영향을 미치지 않고 미안합니다 :) – Prometheus

+0

생성 또는 업데이트가 OK입니다. 결과가 메모리에 저장되는 것이 아니라 데이터베이스에 저장되어야한다고 생각합니다. –

답변

1

이 django_coverage 프로젝트 페이지에 this issue를 참조

이 내 설정은

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' 

] 

콘솔 출력 ... 테스트를위한 것입니다.

또한, coverage.py official FAQ에 특히 이것 좀 봐 :

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

는 모델이 실제로 가져 후 적용 기계가 시작되었는지 보인다.

봅니다 수동으로 명령을 실행하여 표준 장고 테스트 시나리오 (A 내장 테스트 러너를 사용)하고 실행 범위에 백업하려면 : 보고서가 다른 경우

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

을 참조하십시오.

+0

OP 전체 파일을 업데이트했습니다 – Prometheus

+0

편집 됨 out-of- 귀하의 문제에 대한 다른 접근법을 사용하는 일일 답장 – baxeico

+0

예 100 %입니다! 고맙습니다. – Prometheus