Rails rspec测试用户向他/她自己发送消息

时间:2012-10-21 15:09:24

标签: ruby-on-rails rspec

我正在尝试测试,因此用户无法向自己发送消息。目前在我的新消息视图中,我有一个选择框,它提供系统中除current_user之外的所有用户的选择。目前我只有一个测试,它不允许用户从选择框中选择自己作为收件人:

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

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

2 个答案:

答案 0 :(得分:1)

如果用户攻击您的选择并将自己添加到可能的值,您可能会得到一条您不想要的消息。我不知道您的控制器的操作是什么样的,但您应该在模型中测试它,如果接收方与发送方相同,您的模型应拒绝该消息。

答案 1 :(得分: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只是检查是否有密钥,但是如果它是空的则没有?