Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 正在为销毁操作编写测试,但未获得路由匹配{:操作=>;“销毁”,“控制器=>;“地址”}_Ruby On Rails_Ruby On Rails 4_Rspec - Fatal编程技术网

Ruby on rails 正在为销毁操作编写测试,但未获得路由匹配{:操作=>;“销毁”,“控制器=>;“地址”}

Ruby on rails 正在为销毁操作编写测试,但未获得路由匹配{:操作=>;“销毁”,“控制器=>;“地址”},ruby-on-rails,ruby-on-rails-4,rspec,Ruby On Rails,Ruby On Rails 4,Rspec,我正在尝试为我的地址\u控制器的销毁操作编写rspec测试。我遇到了一个问题,它无法找到我的路线,即使我在我的rake routes中清楚地看到它 我得到以下错误: Failure/Error: delete action, params ActionController::UrlGenerationError: No route matches {:action=>"destroy", :controller=>"addresses"} 这是我的测试: describe '#de

我正在尝试为我的
地址\u控制器的销毁操作编写rspec测试。我遇到了一个问题,它无法找到我的路线,即使我在我的
rake routes
中清楚地看到它

我得到以下错误:

Failure/Error: delete action, params
ActionController::UrlGenerationError:
No route matches {:action=>"destroy", :controller=>"addresses"}
这是我的测试:

describe '#destroy' do
  let (:old_address) { FactoryGirl.create(:address, addressable: user) }

  let(:action) { :destroy }
  let(:params) {   }
  let(:referer) { '/' }


  before do
    request.env['HTTP_REFERER'] = referer
    login_user user, request
  end

  it 'redirects back' do
    delete action, params
    expect(response).to redirect_to(referer)
  end

end
DELETE /addresses/:id(.:format)                   addresses#destroy
def destroy
  address = Address.find_by_id(params[:id])
  if address.present? && address.destroy
    flash[:notice] = "Address deleted."
  end
  redirect_to :back
end
rake路由:

describe '#destroy' do
  let (:old_address) { FactoryGirl.create(:address, addressable: user) }

  let(:action) { :destroy }
  let(:params) {   }
  let(:referer) { '/' }


  before do
    request.env['HTTP_REFERER'] = referer
    login_user user, request
  end

  it 'redirects back' do
    delete action, params
    expect(response).to redirect_to(referer)
  end

end
DELETE /addresses/:id(.:format)                   addresses#destroy
def destroy
  address = Address.find_by_id(params[:id])
  if address.present? && address.destroy
    flash[:notice] = "Address deleted."
  end
  redirect_to :back
end
地址\u controller.rb:

describe '#destroy' do
  let (:old_address) { FactoryGirl.create(:address, addressable: user) }

  let(:action) { :destroy }
  let(:params) {   }
  let(:referer) { '/' }


  before do
    request.env['HTTP_REFERER'] = referer
    login_user user, request
  end

  it 'redirects back' do
    delete action, params
    expect(response).to redirect_to(referer)
  end

end
DELETE /addresses/:id(.:format)                   addresses#destroy
def destroy
  address = Address.find_by_id(params[:id])
  if address.present? && address.destroy
    flash[:notice] = "Address deleted."
  end
  redirect_to :back
end
当我可以手动触发并显示在我的rake routes中时,为什么它没有检测到我的路由?您缺少参数。(路由需要有它来计算url)


请尝试
let(:params){id:old_address.id}

是否发送id?我看不到。@DaveNewton我看不到,但我认为这一点不重要,因为它甚至找不到路由。Rails找不到路由,因为你没有发送ID。你的参数中必须有ID。否则rails将无法正确关联路由。下面是路由的详细描述:99%的情况下,当您在测试中遇到路由问题时,指向params的问题。@Huy如其他人所述,如果没有ID,则没有要匹配的路由:您的路由显式包含ID。