2017-08-06 84 views
0

我很新的Django和測試....Django的測試客戶端得到回報404,而不是200

我測試我的應用程序,每一次我做threads_page = self.client.get('/threads/1/')返回404個狀態,而不是200(該網址的作品,1是主題ID)。

我發現一個線程有同樣的問題,並有問題的答覆(Django test client get returns 404 however works in shell),但我仍然不知道如何解決它。 的問題是,在我的意見我有一個參數一個get_object_or_404,但我不知道如何傳遞參數的測試:

views.py

def threads(request, subject_id): 
    subject = get_object_or_404(Subject, pk=subject_id) 
    return render(request, 'forum/threads.html', {'subject': subject}) 

這是我的測試,現在

def test_check_threads_content_is_correct(self): 
    threads_page = self.client.get('/threads/1/') 
    self.assertEqual(threads_page.status_code, 200) 

謝謝!

*這是我在Github上的代碼的情況下,它可以幫助 https://github.com/IreneG5/we_are_social_forum

+0

使用'reverse()'函數,在你的應用程序的urls.py'和'namespace'中爲你的項目urls.py中的url添加'name'。然後'url = reverse('')'.. – zaidfazil

+0

我試過了,但現在我收到了更多的錯誤......請問您可以發佈完整的代碼行嗎? 而不是'threads_page = self.client.get('/ threads/1 /')'你建議'threads_page = reverse('threads:threads') 而在threads/urls.py中'url(r'^ threads /(?P \ d +)/ $',forum_views.threads,name ='threads')' 而在myproject/urls.py'url(r'^ threads /(?P \ d +)/ $' forum_views.threads,include('threads /(?P \ d +)/ $。urls',namespace ='threads'))'。 我沒有在我的應用程序(線程)url.py之前,一切都在項目下urls.py – Ire

回答

0

我有非常類似的問題。我從來沒有真正發現過一個問題,並採取了2個網址 - 一個帶有參數,另一個沒有。在views.py我改變def threads(request, subject_id):def threads(request, subject_id=None):,然後在該函數的頂部添加:

if not subject_id: 
    subject_id = request.GET.get('subject') 

,並在我的測試:

threads_page = self.client.get('/threads/', {'subject': '1'}) 

如果有人有在的URL參數問題的解答然後取回答案 - 我也會使用它!但是,如果沒有,那麼這應該完成工作。

Django測試更重要的部分 - 測試數據庫

測試通常使用一個單獨的,每個測試,數據庫開始空。有幾種將數據放入數據庫的方法。基本概念是,通過在「測試數據庫」而不是生產數據庫上運行測試,您可以精確地控制數據庫中的內容,從而使測試保持一致,從而可以進行任何測試(例如,刪除測試)不會搞亂你的生產數據。我花了一段時間才明白這一切。 Django文檔解釋了很多,但並不總是如此清楚。但是,如果你有測試期望數據,即使它是常規數據庫中的「永久」數據,它也不會出現在測試數據庫中,除非你以某種方式專門添加它。

+0

感謝您的。我嘗試了id,但沒有爲我工作,仍然404:S – Ire

+0

你(更改urls文件後)手動嘗試URL'/ threads /?subject = 1'(或類似)以確保它可以這樣工作(所以希望測試會)? – manassehkatz

+0

我沒有改變url文件。 我現在改成了'url(r'^ threads /?subject = 1',forum_views.threads,name ='threads')'(我不知道它是否正確),沒什麼,現在我得到在需要subject_id的其他模板中出錯。 – Ire

相關問題