快速业务通道

Ruby on rails开发从头来(windows)(二十七)- 测试驱动开发 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

Ruby on rails开发从头来(windows)(二十七)- 测试驱动开发

时间:2011-12-02 博客园 Cure

在敏捷开发的实践中,测试驱动是少不了的。这篇来看看在rails中的一个测试驱动开发的例子。

在前面我们编写并进行了一些单元测试和功能测试,现在,我们的客户突然要求添加一个功能:系统的每个用户都可以对商品进行查询。

我们先初步的画了一些草图,来整理我们的思路和设计,然后开始写代码。对于具体的实现,我们已经有了大致的思路,但是如果有更多的反馈信息的话会有助于我们走在正确的道路上。我们会在深入到代码之前,编写测试代码。考虑我们的代码将怎样工作,确定一些规约,当测试通过,你的代码就OK了。

现在,我们来考虑一下查询功能的测试,应该由哪个controller来控制查询操作呢?用户和管理员都可以进行查询操作,我们可以在store_controller.rb或者admin_controller.rb中添加一个search()的Action,但是这里我们添加一个SearchController,并且含有一个方法search。在rails命令行执行命令:

depot>ruby script/generate controller Search search

我们看到,在app/controllers和test/functional目录下已经生成了对应的文件。但是现在我们并不关心SearchController的search方法的实现,我们关心的是在测试时我们所期望看到的结果。现在添加测试代码,在test/functional/search_controller_test.rb中添加test_search方法:

我们首先想到的是调用search的Action,然后判断是否得到了响应:

get :search, :title => "Pragmatic Version Control"
assert_response :success

根据之前的草图,我们应该在页面上显示一个flash信息,所以我们要判断flash信息的文本,以及是否显示了正确的页面:

assert_equal "Found 1 product(s).", flash[:notice]
assert_template "search/results"

然后我们想要判断查询所得到的商品信息:

products = assigns(:products)
assert_not_nil products
assert_equal 1, products.size
assert_equal "Pragmatic Version Control", products[0].title

我们还想判断用来显示查询结果的页面的一些内容,我们查询到的商品会作为列表在页面上显示,我们使用catelog视图相同的css样式:

assert_tag :tag => "div",
   :attributes => { :class => "results" },
   :children => { :count => 1,
   :only => { :tag => "div",
   :attributes => { :class => "catalogentry" }}}

Ruby on rails开发从头来(windows)(二十七)- 测试驱动开发(2)

时间:2011-12-02 博客园 Cure

下面是完整的测试方法:

def test_search
  get :search, :title => "Pragmatic Version Control"
  assert_response :success
  assert_equal "Found 1 product(s).", flash[:notice]
  assert_template "search/results"
  products = assigns(:products)
  assert_not_nil products
  assert_equal 1, products.size
  assert_equal "Pragmatic Version Control", products[0].title
  assert_tag :tag => "div",
   :attributes => { :class => "results" },
   :children => { :count => 1,
   :only => { :tag => "div",
   :attributes => { :class => "catalogentry" }}}
 end 

现在我们来运行测试:ruby test/functional/search_controller_test.rb

不出意外,会得到下面的结果:

test_search(S

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号