2017-08-06 79 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

相关问题