gpt4 book ai didi

ruby-on-rails - Autotest 和 Factory Girl 的验证问题

转载 作者:数据小太阳 更新时间:2023-10-29 08:06:12 26 4
gpt4 key购买 nike

我有自动测试的问题。在我的用户模型中,用户名和电子邮件地址是唯一的。当我开始自动测试时,一切正常。在第二轮中,从自动测试中,我有一个

Validation failed: Email has already been taken, Username has already been taken

只有两次测试出错。我不明白为什么,我将 factorygirl 与序列一起使用,每次都会生成一个新用户名。

这是我的 rspec2 文件:

describe User do

specify { Factory.build(:user).should be_valid }

context "unique values" do

before :all do
@user = Factory.create(:user)
end


it "should have an unique email address" do
Factory.build(:user, :email => @user.email).should_not be_valid
end

it "should have an unique username" do
Factory.build(:user, :username => @user.username).should_not be_valid
end

end


context "required attributes" do

it "should be invalid without an email address" do
Factory.build(:user, :email => nil).should_not be_valid
end

it "should be invalid without an username" do
Factory.build(:user, :username => nil).should_not be_valid
end

it "should be invalid without an password" do
Factory.build(:user, :password => nil).should_not be_valid
end

it "should be invalid without an address" do
Factory.build(:user, :address => nil).should_not be_valid
end


end
end

工厂:

Factory.sequence :username do |n|
"Outfit#{n}er"
end

Factory.sequence :email do |n|
"user#{n}@example.com"
end

Factory.define :user do |u|
u.username { Factory.next :username }
u.email { Factory.next :email }
u.password 'secret'
u.phone_number '02214565854'
u.association :address, :factory => :address
end

Factory.define :confirmed_user, :parent => :user do |u|
u.after_build { |user| user.confirm! }
end

唯一两个不起作用的测试是在“唯一值”上下文中。所有其他测试都没有错误。

谢谢

最佳答案

这正是我刚刚遇到的问题——并且有一个奇怪的经历,如果我只是运行“rake spec”,这个问题似乎不会发生。

在没有找到明显的答案后,我确实尝试了一些似乎解决了问题的方法!如果您使用的是 FactoryGirl,那么在 before() block 内设置类变量似乎是罪魁祸首。

我有一些非常相似的东西:

factory :widget do
sequence(:name) { |n| "widget#{n}" }
end

然后:

describe Widget do
before(:each) { @widget = FactoryGirl.create(:widget) }
it ...yadda yadda...
@widget.foo()
end
end

自动测试会发现唯一性约束问题。我将 rspect 测试更改为:

describe Widget do
let(:widget) { FactoryGirl.create(:widget) }
it ...yadda yadda...
widget.foo()
end
end

...并且唯一性约束问题消失了。不确定为什么会发生这种情况,它似乎不应该发生,但可能是一个可行的解决方案。

关于ruby-on-rails - Autotest 和 Factory Girl 的验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599321/

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