2013-05-14 26 views
6

Ok, vì vậy tôi cần đơn vị kiểm tra chế độ xem, biểu mẫu chính xác hơn trong chế độ xem. Vì vậy, tôi tạo ra một bài kiểm tra đơn vị như vậy.Làm thế nào để bạn thử nghiệm các đơn vị trong Django?

class ViewTest(TestCase): 
    fixtures = ['fixture.json'] 
    def setUp(self): 
     self.client = Client() 
    def test_company_create(self): 
     post_data = { 
      'form-0-user': '', 
      'form-0-share': '', 
      'form-TOTAL_FORMS': 1, 
      'form-INITIAL_FORMS': 0, 
      'form-MAX_NUM_FORMS': 10 
     } 
    resp = self.client.post('/company/create/', post_data) 
    self.assertFormError (resp, 'shareholder_formset', 'share', 'This field is required.') 
    self.assertFormError (resp, 'shareholder_formset', 'user', 'This field is required.') 

Ofcourse tôi nhận lại một lỗi

AttributeError: 'ShareholderFormFormSet' object has no attribute 'fields'

Vì formset có hình thức trong đó, chứ không phải lĩnh vực ..... Vì vậy, cách chính xác để thử nghiệm một formset là gì?

+0

Hãy xem câu hỏi tương tự: http://stackoverflow.com/questions/1630754/django-formset-unit-test. – alecxe

+0

@alecxe Câu hỏi đó tương tự chỉ theo nghĩa là nó cũng là về các formets và kiểm tra đơn vị ... @Viktor Thế còn thử nghiệm 'ShareholderForm' thì sao? Có vẻ như đó là những gì bạn đang cố gắng làm với sự khẳng định của bạn ... – Ngenator

+0

Cả hai bạn đều đang kiểm tra Chế độ xem và Biểu mẫu trong thử nghiệm "đơn vị" này. Không cần phải thực hiện POST để kiểm tra biểu mẫu. Xem phần "Biểu mẫu thử nghiệm" trong [Hướng dẫn kiểm tra ở Django # 2] (http://toastdriven.com/blog/2011/apr/17/guide-to-testing-in-django-2/) – gertvdijk

Trả lời

2

Đó là một thử nghiệm chức năng (kể từ khi bạn đi qua chế độ xem, có thể yêu cầu mô hình nếu bạn lưu, v.v.).

Đối với các biểu mẫu, django-webtest dễ sử dụng hơn nhiều; bạn sẽ không phải lo lắng về những chi tiết này với nó: https://pypi.python.org/pypi/django-webtest

0

Khi bạn chỉ ra, đối số tên biểu mẫu trong assertFormError thực sự chỉ là một khóa trong response.context_data. Chìa khóa bạn đang sử dụng trả về một danh sách các biểu mẫu trong bộ định dạng. Vì vậy, khi bạn phát hiện ra, nó không hoạt động với assertFormError.

Một tùy chọn là sử dụng assertEqual và chỉ thực hiện so sánh trực tiếp. Một cái gì đó như:

self.assertEqual(response.context_data[u'shareholder_formset'][form_index].errors['share'], 'This field is required.') 

Tôi cũng muốn đề cập rằng IDE (PyCharm) của tôi đã giúp rất nhiều trong việc tìm ra điều này. Tôi đã làm việc trên một vấn đề tương tự. Bật trình gỡ lỗi, đặt điểm ngắt sau cuộc gọi để đăng() và kiểm tra phản hồi, đưa ra giải pháp.

Các vấn đề liên quan