我无法使用Rspec测试我的几个控制器,尤其是那些在路由中使用命名空间的控制器。有没有人知道为什么会发生这种情况以及如何纠正它?它让我发疯了。
这是我的错误。 失败/错误:得到'显示' ActionController的:: RoutingError: 没有路线匹配{:controller =>"社区/供应商",:action =>" show"}
这是我的控制器。
class Community::VendorsController < ApplicationController
def show
@vendor = Vendor.find_by_uuid(params[:uuid])
render :file => "#{Rails.root}/public/404.html", :status => 404 if @vendor.nil?
end
end
这是我的规格。
describe Community::VendorsController do
let(:vendor){FactoryGirl.create(:vendor)}
before(:each) do
@user = FactoryGirl.create(:vendor_single_user)
sign_in @user
end
it 'should return 404 if no vendor found' do
Vendor.stub(:find_by_uuid => nil)
get 'show'
response[:status].should == 404
end
end
以下是路线。
namespace :community do
get ':uuid/intake' => 'vendors#show'
put ':uuid/intake/' => 'vendors#update'
get ':uuid/check-email' => 'vendors#check_email'
end
答案 0 :(得分:1)
您的路线需要:uuid
参数,但在您的规范中,您没有提供该参数。更新您的规范以传递uuid
参数:
describe Community::VendorsController do
...
it 'should return 404 if no vendor found' do
Vendor.stub(:find_by_uuid => nil)
get 'show', uuid: uuid # Replace uuid with your object's uuid
response[:status].should == 404
end
end