ユーザーが自分自身にメッセージを送信できないようにテストしようとしています。現在、新しいメッセージ ビューには、current_user を除くシステム内のすべてのユーザーを選択できる選択ボックスがあります。現在、ユーザーが選択ボックスから受信者として自分自身を選択できないようにするテストしかありません。
it { should_not have_select(:receiver_id, :options => [user.name]) }
しかし、これでテストは十分でしょうか? 新しいメッセージの作成をテストし、:receiver_id を current_user の ID に設定して確認する必要がありますか? もしそうなら、モデルやリクエストのどこにこの仕様を入れますか?
編集 (メッセージ モデルに検証メソッドを追加しましたが、validate 行をコメントアウトしても rspec はパスします):
編集 2 (エラー ハッシュのテストに合格しません):
メッセージ.rb:
validate :validate_sender_receiver
def validate_sender_receiver
if self.receiver_id == self.sender_id
errors.add(:receiver_id, "Cannot send message to self")
end
end
messages_spec.rb
describe "sending message to yourself" do
before do
@message = user.sent_messages.new(:receiver_id => user.id)
end
it "should not be valid" do
@message.should_not be_valid
end
it "should set the error hash" do
@message.errors.should include("Cannot send message to self")
end
end