2015-08-23 2 views
1

, пожалуйста, помогите решить проблему. Мне нужно сделать объект «пользователем» через gem factory_girl.Как сделать объект с ассоциацией в rspec?

дб схема:

create_table "statuses", force: :cascade do |t| 
    t.string "title" 
end 

create_table "users", force: :cascade do |t| 
    t.string "email",     default: "", null: false 
    t.string "encrypted_password",  default: "", null: false 
    t.integer "status_id",    default: 0 
    t.string "name" 
end 

заводы/users.rb:

FactoryGirl.define do 
    factory :user do 
    sequence(:name){ |i| "us#{i}" } 
    sequence(:email){ |i| "us#{i}@ad.ad" } 
    password 'qwerty' 
    password_confirmation{ |u| u.password } 
    status_id FactoryGirl.create(:status0) 
    end 
end 

заводы/statuses.rb:

FactoryGirl.define do 
    factory :status0 do 
    id 0 
    title 'user' 
    end 

    factory :status1 do 
    id 1 
    title 'manager' 
    end 

    factory :status2 do 
    id 2 
    title 'admin' 
    end  
end 

спецификации/Контроллеры/users_controller_spec.rb:

describe UsersController, type: :controller do 
    describe 'users:index action' do 
    it 'check response status code for index page' do 
     user = FactoryGirl.create(:user) 
     visit users_path 
     expect(response).to be_success 
    end 
    end 
end 

, но после запуска тестов консоли отображения сообщения об ошибке последующей:

[email protected] ~/rails/phs $ rspec spec/controllers/users_controllers_spec.rb:104 
/home/kalinin/.rvm/gems/ruby-2.0.0-p598/gems/activesupport-4.2.1/lib/active_support/inflector/methods.rb:261:in `const_get': uninitialized constant Status0 (NameError) 
    from /home/kalinin/.rvm/gems/ruby-2.0.0-p598/gems/activesupport-4.2.1/lib/active_support/inflector/methods.rb:261:in `block in constantize' 
...... 
............ 

ответ

1

Вы можете использовать association ключевое слово, чтобы определить связь между двумя заводами.

Итак, ваши заводы должны выглядеть следующим образом:

FactoryGirl.define do 
    factory :user do 
    sequence(:name){ |i| "us#{i}" } 
    sequence(:email){ |i| "us#{i}@ad.ad" } 
    password 'qwerty' 
    password_confirmation{ |u| u.password } 
    association :status 
    end 
end 

FactoryGirl.define do 
    factory :status do 
    sequence(:id){ |id| id } 
    title 'user' 
    end 
end 

association :status обеспечит связь между user и status заводов.

Вы можете увидеть больше примеров ассоциации factory_girl here.

 Смежные вопросы

  • Нет связанных вопросов^_^