Rails,失败的断言,没有给出消息

时间:2013-04-20 04:04:35

标签: ruby-on-rails

当尝试为模型编写单元测试时,我一直得到相同的错误,似乎无法修复它。

这是我的测试:

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

当我跑&gt; 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

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

2 个答案:

答案 0 :(得分:2)

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


一些事情:

  1. 您正在测试Active Record验证,这些是经过试验和测试的,库的生产就绪功能,因此无需进行测试。要更熟悉Active Record验证,只需转到docs,然后在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"]}
    

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

    注意:我希望附加一些链接/引用但是我没有Stackoverflow要点

答案 1 :(得分:1)

你的模特错了。

(第3行)
                                                                                                       ↓

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

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

not&#34;然后&#34;但是&#34;而不是&#34;。