快速业务通道

Ruby on rails开发从头来(windows)(十九)-测试开始 - 编程入门网

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

Ruby on rails开发从头来(windows)(十九)-测试开始

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

前面我们已经完成了一个简单的购物车,从这篇开始我们看看在rails中怎样进行测试。

在我们创建购物车程序的时候在我们的depot目录下,就已经有一个test目录了,这就是为我们进行测试准备的。到目前为止,我们看到里面的fixtrues和functional,unit目录中已经有对controller和model对应的测试文件。

我们首先测试一下products这个model。代码test\unit目录下的product_test.rb文件,修改其内容为:

require File.dirname(__FILE__) + ''/../test_helper''
  
class ProductTest < Test::Unit::TestCase
 fixtures :products
 def setup
  @product = Product.find(1)
 end
 # Replace this with your real tests.
 def test_truth
  assert true
 end
end

然后在命令行里运行测试命令: \rails_apps\depot>ruby test/unit/product_test.rb,将会看到下面的输出:

Loaded suite test/unit/product_test
Started
E
Finished in 0.312 seconds.
  
1) Error:
test_truth(ProductTest):
ActiveRecord::StatementInvalid: Mysql::Error: Table ''depot_test.products'' doesn''t exist: DELETE FROM products
………
1 tests, 0 assertions, 0 failures, 1 errors

从上面的信息可以看到,是在depot_test数据库中没有products这个表。这是因为,我们在创建一个rails项目的时候,对应的在mysql中创建了三个库:development,test,production,我们之前编写代码使用的都是development库,现在进行测试,rails使用的是test库。我们现在要作的就是在test库里创建products表,你可以使用sql语句来进行表创建的工作,但是rails给我们提供了更方便的办法,在命令行里使用rake命令:

depot>rake clone_structure_to_test

这样就会development库的结构克隆到test库,完成后会看到在test库里已经有我们用到的四个表了。

Ruby on rails开发从头来(windows)(十九)-测试开始(2)

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

完成后我们要给products造一些测试数据。我们打开fixtures目录下的products.yml文件,修改里面的内容:

# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
version_control_book:
 id:       1
 title:     Pragmatic Version Control
 description:  How to use version control
 image_url:   http://.../sk_svn_small.jpg
 price:     29.95
 date_available: 2005-01-26 00:00:00
automation_book:
 id:       2
 title:     Pragmatic Project Automation
 description:  How to automate your project
 image_url:   http://.../sk_auto_small.jpg
 price:     29.95
 date_available: 2004-07-01 00:00:00

在rails里,一个fixture就代表了一个model的初始的内容,这里,我们包含了两个fixture:version_control_book和automation_book。每个fixture的内容都由列名和对应的内容组成,并且由冒号和空格隔开(Tab是不行的)如果在运行测试的时候提示:

Fixture::FormatError: a YAML error occurred parsing………

那么肯定是yml文件的格式问题。

定义好了fixture,怎样使用它呢?回头看看上面的products_test.rb文件,里面有一句:fixtures :products,作为约定,products_test将从products.yml里加载fixture。下面我们再次运行测试命令:

depot>ruby test/unit/product_test.rb

这次正确执行了,屏幕上会显示信息:

Loaded suite test/unit/product_test
Started
.
Finished in 0.063 seconds.
  
1 tests, 1 assertions, 0 failures, 0 errors

再回头看数据库里,products表中新插入了两条记录,和我们在products.yml文件中作配置的一样。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号