2013-04-20 77 views
1

當嘗試寫型號我不斷收到同樣的錯誤單元測試並不能似乎解決它。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 

當我運行>耙測試

我收到以下錯誤:

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 

我不知道怎麼回事在這裏請幫助!

+1

那麼,什麼是第19行? – 2013-04-20 05:28:05

回答

2

由於每MINITEST ::斷言docs,從「斷言」派生的任何方法將引發異常消息「無法斷言,沒有給出消息」失敗,除非你提供可選的「味精」 paramater


有幾件事情:

  1. 您正在測試活動記錄驗證,這些都是經得起考驗的,圖書館的生產準備功能,所以測試是沒有必要的。爲了更加熟悉Active Record的驗證只是去docs,然後玩弄在軌控制檯

  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"]} 
    

也許探討一些futher學習的話題,瑞安貝特的截屏是偉大和自由大部分。希望這有助於

注:我希望附加一些更多的鏈接/ refrences但是我沒有點#1做

1

你的模式是錯誤的。

(第3行)

錯)驗證:價格,numericality:{greater_then_or_equal_to:0.01}

正確)驗證:價格,numericality:{GREATER_THAN_OR_EQUAL_TO:0.01}

不是「然後」,但「不是」。