Ruby on rails 用户如何保存在用户规范rb测试中?
迈克·哈特尔(Mike Hartl)的书对拒绝重复电子邮件地址进行了如下测试,不区分大小写 调用Ruby on rails 用户如何保存在用户规范rb测试中?,ruby-on-rails,railstutorial.org,Ruby On Rails,Railstutorial.org,迈克·哈特尔(Mike Hartl)的书对拒绝重复电子邮件地址进行了如下测试,不区分大小写 调用User.new会创建内存中的用户,但调用@User.save将其保存到数据库中 运行测试时,它会正确地拒绝重复的地址。但我不知道它是怎么工作的。只有具有相同电子邮件的用户\u将保存到数据库,而不是@user。那么,有效性测试如何在不保存@user的情况下检测到重复 require 'spec_helper' describe User do before do @user = Use
User.new
会创建内存中的用户,但调用@User.save
将其保存到数据库中
运行测试时,它会正确地拒绝重复的地址。但我不知道它是怎么工作的。只有具有相同电子邮件的用户\u将保存到数据库,而不是@user
。那么,有效性测试如何在不保存@user
的情况下检测到重复
require 'spec_helper'
describe User do
before do
@user = User.new(name: "Example User", email: "user@example.com")
end
subject { @user }
.
.
.
describe "when email address is already taken" do
before do
user_with_same_email = @user.dup
user_with_same_email.email = @user.email.upcase
user_with_same_email.save
end
it { should_not be_valid }
end
end
具有相同电子邮件的用户实际上保存在数据库中
请注意,主题是@user
subject{@user}
因此,示例it{should\u not\u valid}
在隐含主题@user
上执行
@user.valid?
返回false,因为您在电子邮件地址上设置了唯一性约束
,并且您的数据库中已经有一条具有相同电子邮件地址的记录(使用保存的相同电子邮件
调用用户)
因此,您的测试示例作为@user
通过是无效的 具有相同电子邮件的用户实际上保存在数据库中
请注意,主题是@user
subject{@user}
因此,示例it{should\u not\u valid}
在隐含主题@user
上执行
@user.valid?
返回false,因为您在电子邮件地址上设置了唯一性约束
,并且您的数据库中已经有一条具有相同电子邮件地址的记录(使用保存的相同电子邮件
调用用户)
因此,您的测试示例作为@user
通过是无效的 运行有效性检查时无需保存对象@user
。rspec表达式it{should\u not\u valid}
在引擎盖下调用@user.valid?
。无论是否保存,此方法都可以在ActiveRecord实例上运行。无需保存对象@user
即可运行有效性检查。rspec表达式it{should\u not\u valid}
在引擎盖下调用@user.valid?
。无论是否已保存ActiveRecord实例,都可以在其上运行此方法