2014-10-01 13 views
2

是否需要爲ModelForm創建一個測試,如下所示?原因是實際上沒有代碼。如何在Django中進行適當測試ModelForms和視圖

class HouseForm(forms.ModelForm): 
    class Meta: 
     model = House 
     exclude = ['user',] 
     fields = ['area', 'num_floors',] 

所以要測試的唯一部分只是檢查是否excludeinclude領域沒有共同的領域。還要測試excludeinclude是否具有該模型的所有字段並且不再有。

它有道理嗎?

另一方面,我想爲下面的視圖編寫單元測試。它利用上面的ModelForm。

是不是某種程度上可以編寫一個真正的單元測試,而不使用像Selenium這樣的工具在某種意義上的功能測試?關鍵是我不知道如何通過視圖傳遞一些字段值。

@login_required 
def update_or_create_house(request, house_id=None): 

    if house_id: 
     house = request.user.house_set.get(pk=house_id) 
    else: 
     house = None 

    if request.method=="POST": 
     form = HouseForm(request.POST, instance=house) 
     if form.is_valid(): 
      result = form.save(commit=False) 
      result.user = request.user 
      result.save() 

      return redirect('houses-viewall') 
     else: 
      print form.errors 
    else: 
     form = HouseForm(instance=house) 

    return render(request, 'housemgm/edit_house.html', {'form':form, 'house':house,}) 

最後一個問題:在同一個視圖中是否具有編輯和創建功能的好設計?還是應該將它們分成兩部分?

只是爲了完整起見,該模型是

class House(models.Model): 
    area = models.FloatField() 
    owner = models.ForeignKey(User) 
    num_floors = models.IntegerField(default=1) 

回答

4

首先,不測試通過的Django本身提供的東西。如果您的模型表單中沒有任何自定義代碼,請不要專門測試它:通常,模型表單的功能已經由Django進行了充分測試。

要測試您的視圖,您可以使用內置的test client,它在您的視圖上模擬GET和POST。然後,您可以在測試前後對響應內容和數據庫狀態做出斷言。

最後,是的,這是一個很好的視圖模式。

+1

我不清楚如何將測試窗體的值傳遞給測試客戶端的視圖。但在[鏈接](http://stackoverflow.com/questions/11885211/how-to-write-a-unit-test-for-a-django-view?rq=1)它被回答。所以我只需要使用client.get或client.post的數據參數。 – user3142459 2014-10-02 11:17:40

相關問題