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。