gpt4 book ai didi

ruby-on-rails - 用于检查唯一性的 Rspec 测试

转载 作者:行者123 更新时间:2023-12-04 05:55:01 24 4
gpt4 key购买 nike

这是检查电子邮件唯一性的 rspec 测试(来自 http://ruby.railstutorial.org/chapters/modeling-users.html#code-validates_uniqueness_of_email_test)

require 'spec_helper'

describe User do

before do
@user = User.new(name: "Example User", email: "user@example.com")
end
.
.
.
describe "when email address is already taken" do
before do
user_with_same_email = @user.dup
user_with_same_email.save
end

it { should_not be_valid }
end
end

正如作者所说,我添加了

class User < ActiveRecord::Base
.
.
.
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
uniqueness: true
end

到我的用户模型,测试通过。

但是@user 还没有被保存到数据库中(我在代码的任何地方都找不到@user.save 语句。)所以,user_with_same_email 已经是唯一的,因为在数据库。那它是如何工作的呢?

我在控制台中创建了类似的东西。 user_with_same_email.valid?返回 false(错误“已被占用”),但 user_with_same_email.save 仍然有效。为什么?

最佳答案

您可以使用 shoulda-matchers gem 。

# spec/models/user_spec.rb
require 'spec_helper'

describe User, 'validations' do
it { should validate_uniqueness_of(:email) }
it { should validate_presence_of(:email) }
it { should validate_format_of(:email).with_message(VALID_EMAIL_REGEX) }
end

对最后一个不太满意,但看起来应该可行。

如果您使用许可,则可以使用内置的email_validator 功能PR here

# app/models/user.rb
validates :email, presence: true, email: true

关于ruby-on-rails - 用于检查唯一性的 Rspec 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12683498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com