2016-08-25 4 views
0

Django의 새로운 기능이며 다음과 같은 문제가 있습니다. self.client를 사용하여 내 응용 프로그램의 경로를 테스트합니다. 예 :Django 클라이언트 테스트 (get, post) 응답 db에서로드 된 픽스 대신 메인 DB에서 데이터로드

class BookSell(TestCase): 
    fixtures = [ 
     'sellers.yaml', 
     'books.yaml' 
      ... 
    ] 

    def test_get_book_sell(self): 
     book = Books.objects.get(pk=1) 
     print(book.name)#it prints "El Quijote" in the test output 
     response = self.client.get('/sell/book-sell') 
     self.assertEqual(response.status_code, 200) 
     self.assertContains(response, "Book Sell") 
     self.assertContains(response, "El Quijote")#book name 

해당 경로에 연결된보기 메소드는 데이터베이스의 일부 데이터를로드 한 다음 렌더링해야합니다. 하지만

python manage.py test app_name 

을 실행할 때 응답이 "엘 키호테"를 포함하지 않기 때문에 그것은, 설비에서 데이터를로드하지 않습니다.

python manage.py loaddata fixture_name.yaml ... 

을 한 다음 테스트를 다시 데이터베이스에서보기 방법 데이터를로드를 실행 만 나는 실행할 때.

그래서 내가 대신 테스트 데이터베이스

의 주요 데이터베이스에서 테스트, 내보기 방법 부하 데이터를 실행할 때 내가 잘못이다 어떤 결론? 테스트 데이터베이스에서 데이터 만로드 할 수 있습니까?

장고 버전 : 1.9.4

파이썬 버전 : 2.7.6

내가 마지막으로 내가 잘못하고 있었는지 발견

+0

loaddata를 실행 한 후 테스트를 실행할 때 응답에 "El Quijote"가 포함되어 있습니까? 테스트 데이터베이스는 항상 실제 데이터베이스와 완전히 분리되어 있어야하므로 약간의 관련이 있습니다. – perfect5th

+0

예 내 친구, 저는 그것에 대해 걱정하고 있습니다 : c –

+0

"El Quijote"의 이름을 변경하고 테스트에서 모든 책 이름을 인쇄하는 것과는 다른 기본 데이터베이스를 수정하려고합니다 (test_database, "El Quijote")에서 이름을 얻었습니다. 에서 테스트 데이터베이스로 옮겨 졌는지 확인합니다. – perfect5th

답변

0

비품이 테스트 데이터베이스에서 성공과로드 확신 해요, 이 답변에 감사 :

class BookSellForm(forms.Form): 

    books = [('', 'Choose a book')] 
    books.extend(Books.objects.values_list('id', 'name')) 
    libro = forms.ChoiceField(books) 
: Django: reload form data after db values change

이 같은 형태를 가지고 있었다

그리고 그 문제이고, 나는이 미래에 누군가에게 도움이 될 것입니다 희망, 좋은 일이

class BookSellForm(forms.Form): 

    def __init__(self, *args, **kwargs): 
     super(BookSellForm, self).__init__(*args, **kwargs) 
     books = [('', 'Choose a book')] 
     books.extend(Books.objects.values_list('id', 'name')) 
     self.fields['book'] = forms.ChoiceField(books) 

하고 모든 변경했다.