如何在我的书上显示单元测试工作?

时间:2013-06-18 03:17:02

标签: ruby-on-rails ruby

我正在学习Rails,并学习单元测试。我正在使用的一本书给出了一个显然是错误的例子。

这是验证:

class Product < ActiveRecord::Base
  attr_accessible :description, :image_url, :price, :title

  #VALIDATION PROCESS

  validates :title, :description, :image_url, :presence => true, :length => {:minimum => 10}
  validates :price, :numericality => {:greater_than_or_equal_to => 0.01}
  validates :title, :uniqueness => true
  validates  :image_url, :format => {
    :with => %r{\.(gif|jpg|png)$}i,
    :message => 'Must be a URL for GIF,PNG or JPG image!'
  }
end

这是测试:

require 'test_helper'

class ProductTest < ActiveSupport::TestCase

  test "product price must be positive" do

  product = Product.new(:title => "My Book Title" ,
  :description => "yyy" ,
  :image_url => "zzz.jpg" )

  product.price= -1
  assert product.invalid?
  assert_equal "must be greater than or equal to 0.01" ,
  product.errors[:price].join('; ' )

  product.price = 0
  assert product.invalid?
  assert_equal "must be greater than or equal to 0.01" ,
  product.errors[:price].join('; ' )

  product.price = 1
  assert product.valid?

  end

end

当我使用rake test:units在命令行上运行测试时,我在上一个断言中失败了:

product.price = 1
assert product.valid?

它说Failured assertion, no message given

奇怪的是,这本书本身说这个特定的断言是正确的,所以在测试期间不应该发生任何事情。

那么,那是什么呢?代码是错误的,还是我做错了什么,或者是对的,我只是感到困惑?

1 个答案:

答案 0 :(得分:0)

您已添加验证器

validates :title, :description, :image_url, :presence => true, :length => {:minimum => 10}

这要求:title:description:image_url字段至少包含10个字符。但是,您创建了一个:description => 'yyy':image_url => "zzz.jpg"的产品,这应该是验证失败的原因。

而且,您始终可以使用Kernel#pKernel#puts或其他输出技术检查计划状态。将变量状态转储到您感到困惑的位置,检查程序输出并查看是否可以找出失败原因。这在编写程序时很有用,值得尝试。

此处,您可以在致电errors后始终查看product的{​​{1}}字段。

product.valid?