2012-10-21 158 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