命名空间控制器的Rspec问题

时间:2013-12-18 21:07:12

标签: ruby-on-rails rspec

我无法使用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

1 个答案:

答案 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