0

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

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

然而,这样的考验就够了吗?我是否需要测试创建一条新消息,将 :receiver_id 设置为 current_user 的 id 并检查它?如果是这样,我会将这个规范放在哪里,在模型或请求中?

编辑(在消息模型中添加了一个验证方法,但即使我注释掉了验证行,我的 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 回答