URLの有効なフォーマットが必要なモデルがあります。単体テスト検証のためのテストに失敗する方法URLのフォーマット
class Event < ActiveRecord::Base
validates_format_of :url, :with => /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
end
しかしは、私は失敗したテストを書きたいのソリューションを実装する前に。これは誰かが失敗したテストを書いていく方法ですか? (高度なテスト/マッチャーフレームワークに行く前に、基本的に固執しようとしてくださいなしRSpecのかShouldaソリューション。
class EventTest < ActiveSupport::TestCase
setup do
# These attributes are valid
@event_attributes = { :title => "A title",
:url => "http://somedomain.com/images/land.jpg",}
end
test "should not be valid with an INVALID URL" do
@event = Event.new(@event_attributes.merge(:url => "htp:/domain"))
assert_no_match(/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix, @event.url, "Not a valid format")
end
end
assert_no_match
が正しいアプローチです。任意の提案。
私が焦点を当てているのは、rspec(より読みやすいimhoです)とrubularの組み合わせを使用してテストに合ったURLを作成するというhartlの推奨に従うということです。私はTestCaseについてはわかりませんが、あなたは正直なところにいるようですが、正規表現に対してもう少し失敗している例を試してみてください。 – prusswan
さて、私はRSpecに飛び込む必要があるかもしれませんが、私はそれを突き出してMiniTestを試してみる必要があると思います。私はあなたが言及したチュートリアルをチェックアウトするのを知らない。ありがとう – alenm
私は、URLを検証するために正規表現を使うべきではないと思います。 'before.validation'コールバックを' URI.parse'と一緒に使用してクリーンアップします(userinfoを削除し、スキームがない場合はスキームを追加します)。そして、検証のために 'URI.parse'を再度確認してくださいURLコンポーネントはあなたが望むものです。 –