Я пытаюсь написать спецификацию контроллера, чтобы проверить, что правильное частичное рендеринг после запроса на отправку.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)>'
Я уже несколько дней взламываю это на несколько дней, пытаясь найти разные подходы, которые здесь не приносят. Любая помощь будет высоко ценится :)
В случае ошибки вы можете увидеть список партиций: он отображает 'гостей/форму' вместо. – nathanvda