私はいくつかのバリデーションを持つリンクモデルを持っています。 rspecスイート全体を実行すると、最後の検証で仕様が失敗します。「無効なURLを許可しないでください」モデル仕様中にレールモデルコールバックが実行されない
rspec spec/models/link_spec.rb
を実行すると、モデル仕様がパスします。 validate_url
メソッドは呼び出されません。私のレールアプリは、モデル作成時のコールバックも無視しています。ここで
は私のモデルである:
require 'uri'
class Link < ApplicationRecord
belongs_to :user
validates :url, presence: true
validates :title, presence: true
validates :read, absence: false
validates :user_id, presence: true
before_save :validate_url
private
def validate_url
require 'pry'; binding.pry
uri = URI.parse(self.url)
uri.kind_of?(URI::HTTP)
rescue URI::InvalidURIError
false
end
end
と私のモデル仕様:
require 'rails_helper'
describe Link, type: :model do
it { should validate_presence_of :url }
it { should validate_presence_of :title }
it { should validate_presence_of :user_id }
it "should not allow an invalid url" do
link = Link.create({
title: "new link",
url: "garbage",
user_id: 1
})
expect(link.valid?).to be_falsey
expect(link.save).to be_falsey
end
end
コールバックメソッドがアクセスされない理由を任意のアイデア?私はRails 5.0.0.1とRSpec 3.5.4です。
がヒントをありがとう...それでも同じ問題に実行していますたとえvalidate文でurl_formatを指定したとしても。メソッドが呼び出され、uri.kind_of?(URI :: HTTP)行がfalseを返します。メソッド自体は、Railsコンソールから呼び出されるとfalseを返します。しかし、文を検証してもdbセーブトランザクションが発生しないようにはなりません。 –
申し訳ありませんが、私はあなたが持っていたコードをよく読まなかったと思います。私は少し答えを更新してみましょう、私はあなたが持っている救助を削除します。 – fanta