快速业务通道

Ruby on rails开发从头来(windows)(二十一)-测试Model时的问题 - 编程入门网

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

Ruby on rails开发从头来(windows)(二十一)-测试Model时的问题

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

以前的随笔都是按照书上的例子写下来的,但是,这次在测试Model时,按照书上的例子代码怎么也走不通,所以就换个方式,这篇变成了提问。

按照书上的说法,在products_test.rb开始的时候,会根据定义的yml文件,加载测试数据到一个Hash里,这样,在test的时候我们就可以根据yml文件中用例的名字来访问一个product对象,例如:

def test_read_with_hash
assert_kind_of Product, @product
vc_book = @products["version_control_book"]
assert_equal vc_book["id"], @product.id
assert_equal vc_book["title"], @product.title
assert_equal vc_book["description"], @product.description
assert_equal vc_book["image_url"], @product.image_url
assert_equal vc_book["price"], @product.price
assert_equal vc_book["date_available"], @product.date_available_before_type_cast
end

但是,根据在运行测试的时候总是提示vc_book为Null的错误:

3) Error:

test_read_with_hash(ProductTest):
NoMethodError: You have a nil object when you didn''t expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]
  test/unit/product_test.rb:41:in `test_read_with_hash''

怎么回事呢?即使将product_test.rb里的内容全部替换成书中完整的代码也还是不行,是不是版本问题?

Ruby on rails开发从头来(windows)(二十一)-测试Model时的问题(2)

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

附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_kind_of Product, @product
 end
 def test_create
  assert_kind_of Product, @product
  assert_equal 1, @product.id
  assert_equal "Pragmatic Version Control", @product.title
  assert_equal "How to use version control", @product.description
  assert_equal "http://.../sk_svn_small.jpg", @product.image_url
  assert_equal 29.95, @product.price
  assert_equal "2005-01-26 00:00:00",
  @product.date_available_before_type_cast
 end
 def test_update
  assert_equal 29.95, @product.price
  @product.price = 99.99
  assert @product.save, @product.errors.full_messages.join("; ")
  @product.reload
  assert_equal 99.99, @product.price
 end
 #~ def test_destroy
  #~ @product.destroy
  #~ assert_raise(ActiveRecord::RecordNotFound) { Product.find(@product.id) }
 #~ end
 def test_validate
  assert_equal 29.95, @product.price
  @product.price = 0.00
  assert !@product.save
  assert_equal 1, @product.errors.count
  assert_equal "should be positive", @product.errors.on(:price)
 end
 def test_read_with_hash
  assert_kind_of Product, @product
  vc_book = @products["version_control_book"]
  assert_equal vc_book["id"], @product.id
  assert_equal vc_book["title"], @product.titl

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