RSpec:使用命名路由POST到另一个控制器/ POST

时间:2016-06-02 15:14:30

标签: ruby-on-rails ruby rspec

在我的routes.rb中使用以下路由:

post 'fadvisor', to: 'fadvisor_url_validation#validate', as: :fadvisor, default: :json

我想在fadvisor_url_validation_controller_spec.rb内写一些测试。就像一个简单的测试,看看我是否得到了成功的回应。

RSpec.describe FAdvisorUrlValidationController, type: :controller do
  let (:c_partner) { create(:c_partner) }
  let (:fadvisor) { create(:fadvisor, c_partner: c_partner, url: '/testurl') }
  it 'has a valid token' do
    post :fadvisor
    expect(response).to be_success
  end
end

但是当我这样做时,RSpec告诉我:ActionController::UrlGenerationError: No route matches {:action=>"/fadvisor", :controller=>"fadvisor_url_validation"}

我做错了什么?

1 个答案:

答案 0 :(得分:2)

我认为你的路线是:

post '/fadvisor', to: 'fadvisor_url_validation#validate', as: :fadvisor, default: :json

顺便说一下你的规格是:

it 'has a valid token' do
   post '/fadvisor'
   expect(response).to be_success
end

如果你想使用rails url helper,请确保包括:

<强> rspec_helper.rb

RSpec.configure do |config|
  config.include Rails.application.routes.url_helpers
end

然后您的规范变为:

it 'has a valid token' do
   post fadvisor_path
   expect(response).to be_success
end