2012-10-08 9 views
5

Piszę unittests dla widoków django. Zauważyłem, że jeden z moich widoków zwraca kod przekierowania 301, który nie jest oczekiwany.
Oto mój views.py wspomniany wcześniej.Klient testowy Django otrzymuje przekierowanie 301 podczas uzyskiwania dostępu do url

def index(request): 
    return render(request, 'index.html', 
        {'form': QueryForm()}) 

def query(request): 
    if request.is_ajax(): 
     form = QueryForm(request.POST) 
     return HttpResponse('valid') 

Poniżej znajduje się urls.py.

urlpatterns = patterns('', 
     url(r'^$', 'core.views.index'), 
     url(r'^query/$', 'core.views.query') 
     ) 

Wykonaj test, który się nie powiedzie.

def so_test(self): 
    response = self.client.post('/') 
    self.assertEquals(response.status_code, 200) 

    response = self.client.post('/query', {}) 
    self.assertEquals(response.status_code, 200) 

Moje pytanie brzmi: dlaczego został zwrócony status 301?

+0

których jeden jest powrocie 301? Czy to pełny kod? –

+0

@ Danielochoseman Drugi, przepraszam, że nie było jasne. –

Odpowiedz

25

Zdefiniowałeś URL, który pasuje do /query/, ale testujesz /query. Django przekierowuje do adresu URL z końcowym ukośnikiem, ponieważ w ustawieniach jest APPEND_SLASH=True.

Prawdopodobnie chcesz zmienić swój test:

response = self.client.post('/query/', {}) 
+0

Tak, to wiele wyjaśnia! Dzięki :) Działa teraz. –