0

ユーザーが自分自身にメッセージを送信できないようにテストしようとしています。現在、新しいメッセージ ビューには、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
4

2 に答える 2

1

ユーザーが選択をハッキングして、可能な値に自分自身を追加すると、望ましくないメッセージが表示される可能性があります。コントローラーのアクションがどのように見えるかはわかりませんが、モデルでそれをテストする必要があり、受信者が送信者と同じ場合、モデルはメッセージを拒否する必要があります。

于 2012-10-22T22:01:27.687 に答える
0

私が変更され:

it "should set the error hash" do
    @message.errors.should include("Cannot send message to self")
end

に:

it "should set the error hash" do
    @message.errors.should have_key(:receiver_id)
end

そして今ではうまくいきますが、最初の方法がうまくいかない理由がまだわかりませんか?have_keyは、キーがあるかどうかを確認するだけで、空ではないかどうかを確認しますか?

于 2012-10-23T03:35:29.610 に答える