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

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

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

  我们首先测试下products这个model代码testunit目录下product_test.rb文件修改其内容为:

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


  然后在命令行里运行测试命令: rails_appsdepot>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中创建了 3个库:development,test,production我们的前编写代码使用都是development库现在进行测试rails使用是test库我们现在要作就是在test库里创建products表你可以使用sql语句来进行表创建工作但是rails给我们提供了更方便办法在命令行里使用rake命令:

depot>rake clone_structure_to_test

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

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

# Read about fixtures at http://ar.rubyonrails.org/es/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文件中作配置

Tags:  rubyonrails安装 rubyforrails rubyrails rubyonrails

延伸阅读

最新评论

发表评论