我正在尝试编写测试来验证 RoR 模型中字段的唯一性。
我正在开发 Ruby on Rails 应用程序,我用它来练习我的 TDD 技能。到目前为止,我一直使用 Internet 作为我的资源。我正在编写模型验证测试。我不会使用“should”、“FactoryGirl”(等)gem。我知道使用这些 gem 可以为我节省大量编码,但我最终会使用这些 gem。我想学习如何在没有 gem 的情况下自己编写 rspec 测试,以帮助我了解如何编写测试。到目前为止,我做得很好,直到“唯一性”测试。
如何在不使用“should”、“FactoryGirl”(等)gem 的情况下创建测试以验证“用户”模型中“电子邮件”字段的唯一性。我知道使用这些 gem 会节省大量编码,但我最终会使用这些 gem。我想学习如何在没有 gem 的情况下自己编写 rspec 测试,以帮助我了解如何编写测试。
Stackoverflow(以及网络上的其他地方)对这个问题的大多数“答案”都包括使用这些辅助 gem。但是没有宝石就找不到答案。
这是模型,User.rb
```
class User < ApplicationRecord
validate: :name, :email, presence: true
validates :name, length: { minimum: 2 }
validates :name, length: { maximum: 50 }
# validates_format_of :email, with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i
validates :email, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i, on: :create }
validates :email, uniqueness: true
end
And here is `user_spec.rb`.
require 'rails_helper'
RSpec.describe User, type: :model do
subject {
described_class.new(name: 'John', email: 'john@home.xyz')
}
describe 'Validation' do
it 'is valid with valid attributes' do
expect(subject).to be_valid
end
it 'is not valid without name' do
subject.name = nil
expect(subject).to_not be_valid
end
it 'is not valid without email' do
subject.email = nil
expect(subject).to_not be_valid
end
(...)
it 'is invalid if the email is not unique' do
expect(????????).to_not be_valid
end
end
end
```
我如何写来测试唯一性。我应该使用“主题”以外的其他东西进行测试吗?请记住,这次我不想要使用 gems (Shoulda/FactoryGirl/etc) 的解决方案。
在过去的几天里,我一直在这样做,但没有运气。有什么解决办法吗?Ruby on Rails 上关于 rspec 的最佳教程在哪里?