django表单提交的单元测试

django表单提交的单元测试,django,forms,unit-testing,Django,Forms,Unit Testing,通过根据已知的好字典或已知的坏字典实例化表单对象,可以很容易地测试表单清理。通过使用这些相同的DICT和测试客户机,可以测试关联的视图逻辑 然而,我们仍然有实际HTML表单元素的基本问题。如果我用错了方法怎么办?或者我的动作有错?或者我忘了CSRF_代币?如何编写单元测试来实际测试用户可能体验到的行为 我真的需要使用机械化吗 或者人们使用.get(url)解析表单元素并查看响应的html内容?有没有更干净的方法可以做到这一点?这不仅与Django HTML测试有关,还与需要测试HTML行为的任何

通过根据已知的好字典或已知的坏字典实例化表单对象,可以很容易地测试表单清理。通过使用这些相同的DICT和测试客户机,可以测试关联的视图逻辑

然而,我们仍然有实际HTML表单元素的基本问题。如果我用错了方法怎么办?或者我的动作有错?或者我忘了CSRF_代币?如何编写单元测试来实际测试用户可能体验到的行为

我真的需要使用机械化吗


或者人们使用.get(url)解析表单元素并查看响应的html内容?有没有更干净的方法可以做到这一点?

这不仅与Django HTML测试有关,还与需要测试HTML行为的任何其他应用程序有关

您可以使用诸如的库,从浏览器的角度使用不同的方法(GET/POST/etc)测试表单

对于更多的用户交互测试,您可以使用我个人更喜欢的方式。在splinter中,您实例化了一个名为
浏览器的东西,您可以将其用作真正的浏览器。然后在浏览器中,您可以填充文本框、点击按钮等,然后测试行为

以下是splinter网站的代码片段:

 from splinter.browser import Browser 
 browser = Browser() 
 # Visit URL 
 url = "http://www.google.com" 
 browser.visit(url) 
 browser.fill('q', "#cobrateam") 
 # Find and click the 'search' button 
 button = browser.find_by_css(".lsb") 
 # Interact with elements 
 button.click() 
 if browser.is_text_present("did not match any documents"): 
     print "nobody likes us =(" 
 else: 
     print "we're popular =)" 

在那里,浏览器将打开,将导航到谷歌,填写q字段,单击搜索按钮,然后测试搜索结果。正如您所见,该库非常易于使用,您可以使用它进行非常复杂的测试。

这可以通过Django 1.4中添加的来处理

测试复杂行为不是单元测试,而是集成测试。参见django sane测试项目,它封装了几乎所有可能的测试用例。按照我的思维方式,“页面上的表单,当填充了与我的文章相同的信息时,创建一个与我的文章相等的对象”是一个单元。我希望能够在我的单元测试套件中测试这个简单的行为。当然,但这确实是一个集成测试,因为它测试的是应用程序的真实实例服务器实例。在使用django测试环境(和测试数据库)时,我如何做到这一点?请不要完全按照您的问题进行操作,但是如果您运行django测试服务器,那么您可以使用这些LIB来测试数据。那有用吗?酷。不知道他们加上去了。