2012-10-21 131 views
0

我正在嘗試測試,以便用戶不能發送消息給自己。目前,在我的新消息視圖中,我有一個選擇框,它可以選擇除current_user之外的系統中的所有用戶。目前,我只有一個測試,不允許用戶選擇自己從選擇框收件人:Rails rspec測試用戶發送消息給自己的用戶

it { should_not have_select(:receiver_id, :options => [user.name]) } 

然而,這是一個足以考驗?我是否需要測試創建一條新消息,將receiver_id設置爲current_user的id並檢查它?如果是這樣,我將該規範放在模型或請求中?

編輯(在消息模型添加驗證方法,但我的RSpec的,如果我註釋掉驗證線通過偶數):

編輯2(試驗爲錯誤哈希值不合格):

Message.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

回答

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 

而且現在它工作順利,仍然不明白爲什麼第一種方法不起作用? has_key是否檢查是否有鑰匙,但不是空的?

1

如果用戶侵入您的選擇並將自己添加到可能的值,您可能會收到一條您不想要的消息。我不知道你的控制器的動作是什麼樣的,但是你應該在模型中測試它,如果接收者和發送者一樣,你的模型應該拒絕這個消息。

+0

我做了上面的更改,但我不確定是否正確嗎? – yeenow123