0

您好我正在使用 rspec 来测试我的用户模型。我只是想知道我所做的是否是测试中的常见做法。为了测试错误消息,我正在做这样的事情

    User.create!(users(:first))
    user.update_attributes  email: 'IDon\'tThinkThisIsAValidEmail' 
    user.should_not be_valid
    assert user.errors.messages.include? :email

另外我将如何进行重复测试?调用 full_messages 并测试“电子邮件已被占用”消息?这是一个好习惯吗。我这样做是因为在我的 should_not be_valid 测试通过之前,因为用户名无效,所以这不好。我在做什么是个好主意吗?有更好的测试方法吗?

4

2 回答 2

2

你应该看看shoulda gem,它有一套有用​​的测试断言,包括唯一性验证:

describe User do
  should validate_uniqueness_of(:email)
end

编辑:这是文档的链接,是一个很好的起点

于 2013-02-02T20:16:27.677 回答
1

要验证电子邮件的格式,您可以执行以下操作。请注意,您不必创建用户记录或使用固定装置来编写大多数验证规范。

    it "will not allow invalid email addresses" do
      user = User.new(email: 'notAValidEmail')
      user.should have(1).error_on(:email)
    end

    it "will allow valid email addresses" do
      user = User.new(email: 'valid@email.com')
      user.should have(:no).errors_on(:email)
    end

为了验证存在,您可以这样做:

    it { should validate_presence_of(:email) }

您可以查看 rspec 文档以获取更多示例:

https://www.relishapp.com/rspec/rspec-rails/v/2-3/docs/model-specs/errors-on

于 2013-02-02T20:22:18.643 回答