Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rspec控制器提交不同部分的post请求_Ruby On Rails_Ruby_Post_Rspec_Controller - Fatal编程技术网

Ruby on rails Rspec控制器提交不同部分的post请求

Ruby on rails Rspec控制器提交不同部分的post请求,ruby-on-rails,ruby,post,rspec,controller,Ruby On Rails,Ruby,Post,Rspec,Controller,我正在尝试编写一个控制器规范,以测试在post请求之后是否呈现了正确的部分 以下是要发布到的控制器方法: 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

我正在尝试编写一个控制器规范,以测试在post请求之后是否呈现了正确的部分

以下是要发布到的控制器方法:

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
以下是我编写的失败的spec/controllers/guests\u controller\u 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)>'
1)GuestsController#当客人已在酒店登记入住/表格时进行查找
失败/错误:预期(响应)。要呈现_模板(:partial=>'visions/form')
应为部分操作,但已呈现。
预计{“共享/酒店代理名称”=>1、{u酒店代理名称”=>1、{u表”=>1、{u表”=>1}包括“访问/表”。
#./spec/controller/guests\u controller\u spec.rb:16:in'block(4层)in'
我已经在这方面做了几天了,尝试了在这里发现的不同方法,但运气不好。任何帮助都将不胜感激:)

您发送的

post :lookup, :guest => { :lookup_mobile_phone_number => "5553331212"}
但在控制器中,您使用

params[:lookup_mobile_phone_number]
不是

因此,要修复它,根据您的控制器,请执行以下操作

post :lookup, :lookup_mobile_phone_number => "5553331212"

谢谢你指出这一点。这是一个很好的观点,也是一个愚蠢的错误。我做了那个调整,但它仍然给了我同样的错误。@NamNguyen你可以用一种非常简单的方法调试它。只需添加
raise Guest.all.inspect
raise params.inspect
作为控制器中的第一行,并运行规范。通过这样做,您将检查在测试期间传入的参数以及在数据库中查找的是否有
Guest
。在错误中,您可以看到呈现的部分列表:它呈现
Guest/form
post :lookup, :lookup_mobile_phone_number => "5553331212"