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

  以前随笔都是按照书上例子写下来但是这次在测试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里内容全部替换成书中完整代码也还是不行是不是版本问题?

  附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_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 [email protected]
  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.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
 def test_read_with_fixture_variable
  assert_kind_of Product, @product
  assert_equal @version_control_book.id, @product.id
  assert_equal @version_control_book.title, @product.title
  assert_equal @version_control_book.description, @product.description
  assert_equal @version_control_book.image_url, @product.image_url
  assert_equal @version_control_book.price, @product.price
  assert_equal @version_control_book.date_available, @product.date_available
 end
end


Tags:  rubyonrails安装 rubyforrails rubyrails rubyonrails

延伸阅读

最新评论

发表评论