2014-04-02 98 views
1

我有下面的代码: 我users_controller_test.rb:FactoryGirl验证失败:电子邮件已经采取

require 'test_helper' 

class Api::Be::UsersControllerTest < ActionController::TestCase 

    setup do 
    admin = FactoryGirl.create :admin 

    store = FactoryGirl.create(:store, admin: admin) 
    store.ug_default = UgDefault.new 
    store.save 

    customer = FactoryGirl.create :customer 
    customer.store_id = store.id 
    customer.save 
    end 

    test "should show user" do 
    get :show, store_id: store.id, u: admin.u_token 
    assert_response :success 

    json = response.body 
    data = JSON.parse(json) 

    assert_equal 'ok', data['status'] 
    end 

end 

在我的序列:

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

而且我的工厂:

FactoryGirl.define do 
    factory :admin do 
    end 
end 

And

FactoryGirl.define do 
    factory :store do 
    admin 
    name {generate :string} 
    subdomain {generate :string} 
    linked_domain {generate :string} 
    end 
end 

而且

FactoryGirl.define do 
    factory :customer do 
    end 
end 

而且

FactoryGirl.define do 
    factory :user do 
    first_name {generate :string} 
    last_name {generate :string} 
    email {generate :email} 
    password_digest {generate :password_digest} 
    login_attempts 1 
    company_name {generate :string} 
    phone {generate :string} 
    u_token 'u' 
    end 
end 

AdminUser继承Customer。 现在我有Validation failed: Email has already been taken错误行customer = FactoryGirl.create :customer。我试图清理数据库。耙db:test:prepare也没有工作。

回答

2

是不是您的:admin:customer工厂不会从您的:user工厂继承?如果你的:admin:customer工厂是这样定义的,它会工作吗?

FactoryGirl.define do 
    factory :admin, parent: :user do 
    end 

    factory :customer, parent: :user do 
    end 
end 
+0

THX,现在买我的ActiveRecord :: AssociationTypeMismatch:管理员(#79763910)预期,得到了用户(# - 620843828)错误。如何解决它? – cnaize

+0

哦,他们是不同的班级。如果将'class:Admin'添加到工厂声明中,它会显示:'factory:admin,parent :: user,class:Admin do'? 如果没有,您应该在':admin'和':customer'工厂中添加'email {generate:email}'。 –

相关问题