当尝试为模型编写单元测试时,我一直得到相同的错误,似乎无法修复它。
这是我的测试:
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
我不知道这里发生了什么,请帮忙!
答案 0 :(得分:2)
根据MiniTest :: Assertions docs,从'assert'派生的任何方法都会引发异常消息“失败的断言,没有给出消息”,除非你提供可选的'msg'参数
一些事情:
您正在测试Active Record验证,这些是经过试验和测试的,库的生产就绪功能,因此无需进行测试。要更熟悉Active Record验证,只需转到docs,然后在rails控制台中使用您的模型
仅在尝试“创建”或“保存”时执行活动记录验证 一个模型。例如:
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要点
答案 1 :(得分:1)
你的模特错了。
(第3行)
↓
错误)验证:价格,数值:{greater_then_or_equal_to:0.01}
正确)验证:价格,数值:{greater_than_or_equal_to:0.01}
not&#34;然后&#34;但是&#34;而不是&#34;。