2017-10-05 73 views
0

我用下面的測試,以檢查網頁是否解析爲正確的模板:在很多很多測試單元測試具有靈活的URL模式

from django.test import TestCase 
class HomePageTest(TestCase): 
    def test_landing_page_returns_correct_html(self): 
     response = self.client.get('/') 
     self.assertIn(member='Go to the', container=response.content.decode()) 

    def test_uses_test_home_template(self): 
     response = self.client.get('/test/') 
     self.assertTemplateUsed(response=response, 
           template_name='myapp/home.html') 

我用的self.client.get('/test/')self.client.get('/test/dashboard/')等許多變化。所有這些都在我的myapp.urlpatterns。然後有一天我決定擺脫/test/。或者乾脆更改網址模式。所有的測試都失敗了,因爲我對網址進行了硬編碼。

我想在我的測試中使用靈活的網址。我認爲它包括類似於:

from myapp.urls import urlpatterns as myapp_urls 

和使用myapp_urls在整個測試。

我有兩個問題:

  1. 我如何能實現呢?
  2. 這種方法會有什麼(負面)副作用,我沒有預料到嗎?

回答

2

您可以使用reverse(),例如,如果你有這樣的事情在你的urls.py

from news import views 

urlpatterns = [ 
    url(r'^archive/$', views.archive, name='news-archive') 
] 

你可以寫你的測試是這樣的:

from django.test import TestCase 
from django.urls import reverse 

class NewsArchivePageTest(TestCase): 
    def test_news_archive_page_does_something(self): 
     response = self.client.get(reverse('news-archive')) 
     # do some stuff with the response 

瞭解更多reverse()documentation中。至於負面影響,我認爲沒有。

+0

這很好。我首先將'myapp.urls import urlpatterns'作爲myapp_urls'添加到序言中。然後我使用了'reverse('myapp_urls:test_view_url')',其中'test_view_url'是'urlpatterns'中使用的url模式的名稱。謝謝! – HBat