2016-12-09 1 views
0

Модель Organization имеет много Events, а Event всегда относится к Organization.Тест контроллера с RSPEC и FactoryGirl с ошибкой: 1 получено: 0

Мой Events controller тест, файл controllers/events_controller_spec.rb является:

require 'rails_helper' 

RSpec.describe EventsController, type: :controller do 

    describe "POST #create" do 
    context "with valid attributes" do 
     it "create new event" do 
     post :create, event: attributes_for(:event) 
     expect(Event.count).to eq(1) 
     end 
    end 

    end 
end 

Это мой factories/organizations.rb файл:

FactoryGirl.define do 
    factory :organization do 
    organization_name { Faker::Company.name } 
    end 

    factory :invalid_organization, class: Organization do 
    organization_name '' 
    end 
end 

Это мой factories/events.rb файл:

FactoryGirl.define do 
    factory :event do 
    event_description { Faker::Lorem.sentence(3) } 
    host_name { Faker::Internet.domain_name } 
    organization { create(:organization) } 
    end 
end 

На основании вышеизложенного Я предполагаю, что organization создается до создания любого event.

Мой тест не соответствует этой ошибке.

$ rspec spec/controllers/events_controller_spec.rb 

Failures: 

    1) EventsController POST #create with valid attributes create new event 
    Failure/Error: expect(Event.count).to eq(1) 

     expected: 1 
      got: 0 

     (compared using ==) 
    # ./spec/controllers/events_controller_spec.rb:9:in `block (4 levels) in <top (required)>' 

Finished in 1.53 seconds (files took 9.03 seconds to load) 
1 example, 1 failure 

Не знаете, как исправить это и пройти тест?

ответ

0

Попробуйте переместить его внутри ожидать

it "create new event" do 
    expect do 
    post :create, { event: attributes_for(:event) } 
    end.to change(Event, :count).by(1) 
end 
+0

Сейчас я получаю это: Неудачи: 1) EventsController POST #create с действительными атрибутами создать новое событие Failure/ошибка : expect (post: create, {event: attributes_for (: event)}). изменить (Event,: count) .by (1) ожидается #count, который изменился на 1, но не был предоставлен блок #. /spec/controllers/events_controller_spec.rb:10:in 'block (4 уровня) в ' –

+0

попробуйте обновленный ответ –

+0

Теперь ошибка se Эмс быть одни и те же: Неудачи: 1) EventsController POST #create с действительными атрибутами создание нового событием Failure/ошибки: ожидать делать сообщений: создание, {событие: attributes_for (: событие)} изменения end.to (Событие,: count) .by (1) Ожидаемый #count изменился на 1, но был изменен на 0 # ./spec/controllers/events_controller_spec.rb:8:in 'block (4 levels) in ' –

0

Попробуйте

it "create new event" do 
    event_attributes = FactoryGirl.build(:event).attributes.symbolize_keys 
    post :create, event: event_attributes 
    expect(Event.count).to eq(1) 
end 

Надежда, что помогает!

0

Проблема attributes_for(:event) включает в себя атрибут organization, который является объектом Organization. Это НЕ то, что метод контроллера ожидает получить из формы new и event_params, и событие не создается.

Изменить его так, чтобы сфабрикованное атрибут только ид ...

FactoryGirl.define do 
    factory :event do 
    event_description { Faker::Lorem.sentence(3) } 
    host_name { Faker::Internet.domain_name } 
    organization_id { create(:organization).id } 
    end 
end 
Смежные вопросы