1

在尝试为模型编写单元测试时,我不断收到相同的错误并且似乎无法修复它。

这是我的测试:

require 'test_helper'

class ProductTest < ActiveSupport::TestCase
test "product attirbutes must not be empty" do
    product = Product.new
    assert product.invalid?
    assert product.errors[:title].any?
    assert product.errors[:description].any?
    assert product.errors[:price].any?
    assert product.errors[:image_url].any?
end

  test "product price must be positive" do
    product = Product.new(title:       "My Book Title",
                          description: "yyy",
                          image_url:   "zzz.jpg")

    product.price = -1
        # line number 19 below
    assert product.invalid?
    assert_equal ["must be greater than or equal to 0.01"],
      product.errors[:price]

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

    product.price = 1
    assert product.valid?
  end

end

当我运行 > rake test

我收到以下错误:

 1) Failure:
ProductTest#test_product_price_must_be_positive
/test/models/product_test.rb:19]:
Failed assertion, no message given.

这是我的模型:

class Product < ActiveRecord::Base
validates :title, :description, :image_url, presence: true
validates :price, numericality: {greater_then_or_equal_to: 0.01}
validates :title, uniqueness: true
validates :image_url, allow_blank: true, format: {
    with: %r{\.(gif|jpg|png)\Z}i,
    message: 'must be a url for GIF, JPG or PNG image.'
}
end

我不知道这里发生了什么,请帮忙!

4

2 回答 2

2

根据 MiniTest::Assertions docs,除非您提供可选的 'msg' 参数,否则从 'assert' 派生的任何方法都会在失败时引发异常消息“断言失败,未给出消息”


一些东西:

  1. 您正在测试 Active Record 验证,这些都是经过试验和测试的库的生产就绪功能,因此没有必要对其进行测试。要更加熟悉 Active Record 验证,只需阅读文档,然后在 rails 控制台中使用您的模型

  2. 只有在尝试“创建”或“保存”模型时才会执行活动记录验证。例如:

    my_user = User.create(name: nil, email: nil) # try save to DB - fails silently
    my_user.valid? # => false
    my_user.errors.messages # => {name:["can't be blank"], email:["can't be blank"]}
    

也许探索一些关于该主题的进一步学习,Ryan Bate 的截屏视频很棒而且大部分都是免费的。希望这可以帮助

注意:我希望附加更多链接/参考,但是我没有 Stackoverflow 点要做

于 2013-11-28T12:34:56.550 回答
1

你的模型是错误的。

(第 3 行)          
                       ↓ 

错误)验证:价格,数字:{greater_then_or_equal_to:0.01}

                                

正确)验证:价格,数值:{greater_than_or_equal_to:0.01}

不是“那么”而是“比”。     

于 2014-03-19T22:50:50.680 回答