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

実行時>レーキテスト

次のエラーが表示されます。

 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' から派生したメソッドは失敗時に例外メッセージ "Failed assertion, no message given" を発生させます。


いくつかのこと:

  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 に答える