2014-12-19 5 views
0

Я пытаюсь написать спецификацию контроллера, чтобы проверить, что правильное частичное рендеринг после запроса на отправку.Rspec диспетчерский пост для рендеринга разных частей

Здесь метод контроллера быть размещен на:

def lookup 
@guest = Guest.where("mobile_number = ?", params[:lookup_mobile_phone_number]).first_or_initialize do |g| 
    g.mobile_number = params[:lookup_mobile_phone_number] 
end 
if @guest.new_record? 
    @visit = Visit.new(hotel_id: params[:hotel_id]) 
    render partial: "guests/form" 
else 
    @visit = Visit.new(guest_id: @guest.id, hotel_id: params[:hotel_id]) 
    render partial: "visits/form" 
end 
end 

Вот спецификации/контроллеры/guests_controller_spec.rb я писал, что не удается:

RSpec.describe GuestsController, :type => :controller do 
describe "#lookup" do 
render_views 
let!(:returning_guest) { create(:test_guest) } 
    context "when guest is already registered with hotel" do 
     it "renders visits/form" do 
     post :lookup, :guest => { :lookup_mobile_phone_number => "5553331212"} 
     expect(response).to render_template(:partial => 'visits/form') 
     end 
    end 
end 
end 

Вот завод я используя для: test_guest

FactoryGirl.define do 
    factory :test_guest, :class => 'Guest' do 
    name 'Jack Guest' 
    mobile_number '5553331212' 
    end 
end 

Это ответ, который я получаю, когда тест не прошел

1) GuestsController#lookup when guest is already registered with hotel renders visits/form 
    Failure/Error: expect(response).to render_template(:partial => 'visits/form') 
    expecting partial <visits/form> but action rendered <["shared/_hotel_agent_name",  "_hotel_agent_name", "guests/_form", "_form"]>. 
    Expected {"shared/_hotel_agent_name"=>1, "_hotel_agent_name"=>1, "guests/_form"=>1, "_form"=>1} to include "visits/form". 
# ./spec/controllers/guests_controller_spec.rb:16:in `block (4 levels) in <top (required)>' 

Я уже несколько дней взламываю это на несколько дней, пытаясь найти разные подходы, которые здесь не приносят. Любая помощь будет высоко ценится :)

+0

В случае ошибки вы можете увидеть список партиций: он отображает 'гостей/форму' вместо. – nathanvda

ответ

0

Вы отправляете

post :lookup, :guest => { :lookup_mobile_phone_number => "5553331212"} 

но в контроллере используется

params[:lookup_mobile_phone_number] 

не

params[:guest][:lookup_mobile_phone_number] 

Так, чтобы исправить это, в соответствии с вашими контроллер, до

post :lookup, :lookup_mobile_phone_number => "5553331212" 
+0

Спасибо, что указали это. Это хороший момент и глупая ошибка на моем конце. Я сделал это, но он все равно дает мне такую ​​же точную ошибку. –

+0

@NamNguyen Вы можете отладить его очень простым способом. Просто добавьте 'raise Guest.all.inspect' или' raise params.inspect' как первую строку в вашем контроллере и запустите свою спецификацию. Делая это, вы проверите, какие параметры входят во время теста, и есть ли «Гость», который вы ищете в базе данных. –

+0

Awesome, спасибо за этот совет и за вашу помощь! –

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