컨트롤러에 대한 테스트를 작성하려고하는데 관련 모델 (has_many, belongs_to 등 ...)에 대한 글쓰기를 시도 할 때까지 모든 것이 잘 진행되고있었습니다. 시작 안내서를 읽으려고했습니다. FactoryGirl 협회에 관한 나는 최선 내가 할 수있는 수행하려고했습니다,하지만 난 같은 오류를 얻을 :레일즈 : Rspec 및 FactoryGirl 협회
1) GuestsController POST #create with valid attributes saves the guest to the database
Failure/Error: post :create, guest: FactoryGirl.attributes_for(@guest)
ArgumentError:
Factory not registered: #<Guest:0x007fb7b1171298>
나는 매우 새로운 레일 및 테스트를 위해입니다. 여기에 지금까지있어 무엇 :
invites_controller :
...
has_many :guests
...
guests_controller :
....
belongs_to :invite
...
초대 공장 :
FactoryGirl.define do
factory :invite do |f|
f.name { Faker::Name.name }
f.invite_code { Faker::Number.number(4) }
factory :invite_with_guests do
transient do
guests_count 5
end
after(:create) do |invite, evaluator|
create_list(:guest, evaluator.guests_count, invite: invite)
end
end
end
end
게스트 공장 :
FactoryGirl.define do
factory :guest do |f|
f.name { Faker::Name.name }
f.attendance_status "yes"
f.starter "Mushroom"
f.main "Beef"
f.dessert "Chicken"
f.dietary_requirements { Faker::Lorem.words(4) }
f.association :invite
end
end
손님 컨트롤러 :
...
def create
@invite = Invite.find(params[:invite_id])
@guest = @invite.guests.create(guest_params)
redirect_to edit_invite_path(@invite)
end
...
게스트 컨트롤러 사양 : 모든 도움을 주시면 감사
...
describe "POST #create" do
before :each do
@invite = FactoryGirl.create(:invite_with_guests)
@guest = @invite.guests.first
end
context 'with valid attributes' do
it 'saves the guest to the database' do
expect {
post :create, guest: FactoryGirl.attributes_for(@guest)
}.to change(Guest,:count).by(1)
end
end
...
end
...
.
편집 :
경로 :
Prefix Verb URI Pattern Controller#Action
invite_guests GET /invites/:invite_id/guests(.:format) guests#index
POST /invites/:invite_id/guests(.:format) guests#create
new_invite_guest GET /invites/:invite_id/guests/new(.:format) guests#new
edit_invite_guest GET /invites/:invite_id/guests/:id/edit(.:format) guests#edit
invite_guest GET /invites/:invite_id/guests/:id(.:format) guests#show
PATCH /invites/:invite_id/guests/:id(.:format) guests#update
PUT /invites/:invite_id/guests/:id(.:format) guests#update
DELETE /invites/:invite_id/guests/:id(.:format) guests#destroy
lookup_invites GET /invites/lookup(.:format) invites#lookup
invites GET /invites(.:format) invites#index
POST /invites(.:format) invites#create
new_invite GET /invites/new(.:format) invites#new
edit_invite GET /invites/:id/edit(.:format) invites#edit
invite GET /invites/:id(.:format) invites#show
PATCH /invites/:id(.:format) invites#update
PUT /invites/:id(.:format) invites#update
DELETE /invites/:id(.:format) invites#destroy
dashboard GET /dashboard(.:format) invites#index
root GET / info#index
편집 2 : 나는 가능한 답변을 아래에 따라 손님 컨트롤러 사양 업데이트되었습니다
, 그것은 여전히 실패하는 것
...
describe "POST #create" do
before :each do
@invite = FactoryGirl.create(:invite_with_guests)
@guest = @invite.guests.first
end
context 'with valid attributes' do
it 'saves the guest to the database' do
expect {
post :create, guest: @guest.attributes
}.to change(Guest,:count).by(1)
end
it 'redirects the edit invite path'
end
...
end
...
다음 오류가 발생합니다.
그것은 게스트 공장 /spec/factories/guests.rb하지 않을 가능성이있다? 복수형? – w1zeman1p
@ w1zeman1p 불행히도 없습니다. 나는 그 간단한 해결책을 원합니다! – lkemitchll