Rails 3.1、RSpec: モデルの検証をテストする
2023-10-04 10:23:24
質問
RailsでTDDの旅を始めたところ、モデル検証のためのテストに関する小さな問題にぶつかり、解決策を見つけることができないようです。例えば、私がUserモデルを持っているとします。
class User < ActiveRecord::Base
validates :username, :presence => true
end
と簡単なテスト
it "should require a username" do
User.new(:username => "").should_not be_valid
end
これは存在検証を正しくテストしていますが、もっと具体的にテストしたい場合はどうしたらよいでしょうか?例えば、エラーオブジェクトでfull_messagesをテストする...。
it "should require a username" do
user = User.create(:username => "")
user.errors[:username].should ~= /can't be blank/
end
最初の試み(should_not be_validを使用)についての私の懸念は、RSpecが説明的なエラーメッセージを生成しないことです。しかし、2 番目のテスト例には小さな欠点があります。
私はテストが何をテストしているのかについてより具体的であることを望みますが、同時にデータベースに触れる必要はないでしょう。
どなたかご意見をお聞かせください。
どのように解決するのですか?
ROR を使った TDD への試み、おめでとうございます!一度始めたら、もう振り返ることはありませんよ。
最も簡単で迅速な解決策は、このように各テストの前に新しい有効なモデルを生成することです。
before(:each) do
@user = User.new
@user.username = "a valid username"
end
しかし、私が提案するのは、すべてのモデルにファクトリーを設定して、自動的に有効なモデルを生成させ、個々の属性に手を加えて、検証を確認することです。私は ファクトリーガール を使います。
基本的に、一度セットアップすると、テストはこのようになります。
it "should have valid factory" do
FactoryGirl.build(:user).should be_valid
end
it "should require a username" do
FactoryGirl.build(:user, :username => "").should_not be_valid
end
それから、これは 良いレールキャスト で、私よりうまく説明しています。
幸運を祈ります :)
最新情報:現在 バージョン3.0 で、ファクトリーガールの構文が変更になりました。これを反映して、サンプルコードを修正しました。
関連
-
[解決済み】取得中。「プロジェクトのクローンとマイグレート後に、「マイグレーションは保留中です。この問題を解決するには 'bin/rake db:migrate RAILS_ENV=development' を実行してください。
-
[解決済み】gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み] Rails のインストールに失敗する: activesupport には Ruby のバージョン >= 2.2.2 が必要です。
-
[解決済み] Paramが無いか、値が空である。ParameterMissing in ResultsController#update
-
[解決済み] 検索 vs 発見する by vs どこに
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜ?
-
[解決済み] Railsです。gemを使った特定バージョンのライブラリのアンインストール
-
[解決済み] rspecにおけるassignsの意味
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] rake spec を実行せずに Rails rspec テスト用のデータベースを準備するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Bundler: コマンドが見つからない
-
[解決済み】OS X Yosemite 10.10.5 で [Ruby on Rails] 5 をインストールすると extconf が失敗して終了コード 1 エラーになる。
-
[解決済み】PG::ConnectionBad: fe_sendauth: パスワードが供給されない
-
[解決済み] Ruby/Rails の「フック」とは何ですか?
-
[解決済み] ウェブパッカーがアプリケーションを見つけ出せない
-
[解決済み] 変更欄のRailsマイグレーション
-
[解決済み] Oauth2 Instagram API "リダイレクトURIが登録されたリダイレクトURIと一致しない"
-
[解決済み] Ruby on Railsでsimple_formを使うさまざまな方法|何が違うの?
-
[解決済み] RubyとRailsの "Date.today "フォーマット
-
[解決済み] railsでcheck_boxをcheckedにする方法は?