在Django配置文件应用程序中测试视图的最佳实践?

时间:2011-10-30 21:07:14

标签: django unit-testing bdd django-testing zombie.js

我想在Django个人资料应用程序中为视图编写一些测试。

视图有一些智能错误处理逻辑。例如如果我们尝试创建配置文件,但配置文件已存在,则只需重定向到现有的配置文件页面(或者可能转到编辑配置文件页面)。

如何测试此错误处理是否按预期工作? 什么是最佳实践?

一个想法是使用Zombie.js做BDD,并测试我看到一个标题不是“创建个人资料”的页面(或者检查我看到一个标题为“编辑个人资料”的页面)。但Django测试文档说:

  • 使用Django的测试客户端确定正确的视图 调用并且视图正在收集正确的上下文数据。
  • 使用浏览器框架(如Twill和Selenium)来测试渲染 HTML和网页的行为,即JavaScript功能。

但是,如果我想使用Django测试客户端,它可以执行以下操作:

  • 模拟URL上的GET和POST请求,并观察响应 - 从低级HTTP(结果标题和状态代码)到页面内容的所有内容。
  • 测试是否对给定的URL执行了正确的视图。
  • 测试给定的请求是否由给定的Django模板呈现,模板上下文包含特定值。

我应该使用测试客户端然后查看页面内容吗?我应该看看哪个模板被渲染了?测试此视图的适当方法是什么?

1 个答案:

答案 0 :(得分:1)

重定向和配置文件创建非常django所以当你可能使用其他框架来测试JS功能时,我会在这个实例中使用django测试客户端。

您必须根据具体情况决定测试的进度。时间有限,某些方面比其他方面更容易破损。例如,我不担心模板解析 - 200状态代码和内容的快速检查是充足的。

Anyhoo,我首先要确定视图的不同状态(我在这里猜测):

  • 渲染自身(检查内容,模板,状态代码等)
  • 个人资料表单验证错误
  • 个人资料表单成功:个人资料创建:成功重定向
  • 智能错误处理/重定向。
  

如何测试此错误处理是否符合要求?

# create object with specific ID.
# post form data that should trigger your special redirect. 
# ensure the redirect takes you to the model you just created via reverse
response = client.post(reverse('form_url'), {'valid_form_data': ''}, follow=True)
assertRedirects(response, reverse('view_url', args=[id]), target_status_code=200)

这将确认正确的配置文件被重定向到您已决定应该触发此操作的任何数据。