【问题标题】:testing rails controllers file测试 Rails 控制器文件
【发布时间】:2013-06-13 11:35:51
【问题描述】:

这是我在 ParticipationConsent 控制器中的创建操作。

ParticipationConsent#create

 def create
    @participation_consent =   @project.participation_consent.new(params[:participation_consent])
    @participation_consent.user = current_user
    @participation_consent.confirmed = true
    @participation_consent.save!
 end

这是我对创建方法的测试

context 'get :create' do 
it 'should be success for approved creative' do 
  sign_in @approved_creative
  expect{
    get :create, :project => @project.id, :participation_consent => { :project_id => @project.id, :user_id => @approved_creative.id, :confirmed_in => false }
  }.to change(ParticipationConsent, :count).by(1)
  response.should redirect_to project_path(@project)
end

当我运行测试文件时,我遇到了这个错误。

Failure/Error: get :create, :project => @project.id, :participation_consent => { :project_id => @project.id, :user_id => @approved_creative.id, :confirmed_in => false }
     ActionController::RoutingError:
       No route matches {:project=>1, :participation_consent => {:project_id=>1, :user_id=>2, :confirmed_in=>false}, :controller=>"participation_consents", :action=>"create"}

你知道我该如何处理吗?

编辑-1:

routes.rb

 project_participation_consents POST   /projects/:project_id/participation_consents(.:format)                              {:action=>"create", :controller=>"participation_consents"}

【问题讨论】:

  • 你能发布你的rake routes吗?

标签: ruby-on-rails testing rspec controller


【解决方案1】:

问题是您正在发送一个创建操作的 GET 请求,这是一个 POST 操作,请将 get 更改为 post

另外,@project 在您的控制器代码中来自哪里?您应该从参数中的 id 加载项目,大概。

@project = Project.find(params[:project_id])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多