私は 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 が説明的なエラー メッセージを生成しないことです。それは単に「期待される有効な? false を返し、true になった」と言っているだけです。ただし、2 番目のテスト例には小さな欠点があります。エラー オブジェクトを取得するために、new メソッドの代わりに create メソッドを使用しています。
テスト対象をより具体的にしたいのですが、同時にデータベースに触れる必要はありません。
誰でも何か入力がありますか?