2017-01-03 7 views
0

My spec/controllers/undertakings_controller_spec.rbは以下のとおりです。Rspecエラー、すべてのモデルでアクションを作成

require 'rails_helper' 
    RSpec.describe UndertakingsController, type: :controller do 
     describe '#create' do 
     let(:undertaking_params) do 
      attributes_for(:undertaking) 
     end 
     it 'increases undertaking by 1' do 
       user=create(:user) 
       login_user user 
       expect{post :create , undertaking: undertaking_params }.to change(Undertaking, :count).by(1) 
     end 
     end 
     end 

他のアクションのテストが機能するため、この仕様ファイル内の他のアクションを削除します。 とMy controllers/undertakings_controller.rbは以下のとおりです。

 class UndertakingsController < ApplicationController 
      def create 
      @undertaking=current_user.undertakings.build(undertaking_params) 
      @undertaking.asking_id=params[:asking_id] 
      if @undertaking.save 
      flash[:success] = "依頼の申し込みに成功しました。" 
      redirect_to @undertaking.asking 
      else 
      @[email protected] 
      render 'askings/show' 
      end 
     end 

とMy models/undertaking.rbは以下のとおりです。

 class Undertaking < ActiveRecord::Base 
     belongs_to :user 
     belongs_to :asking 
     has_many :comments 
     has_one :deciding 
     validates :content , presence: true , length: {maximum: 800} 
     validates :title , presence: true , length: {maximum: 20} 
    end 

私のエラーは以下の通りです。

 No route matches {:action=>"create", :controller=>"undertakings", :undertaking=>{:title=>"MyString", :content=>"MyText", :result=>false}} 

作成アクションのルートは次のとおりです。

 asking_undertakings POST  /askings/:asking_id/undertakings(.:format)     undertakings#create 

specファイルにasking_idがないと思われるかもしれません。 しかし、私は何をすべきか理解できません。 教えてください。

答えて

1

あなたのルートで定義されているように、作成パスはasking_idがparamsとして渡される必要があります。だから、動作するはず

post :create, asking_id: <asking-id>, undertaking: undertaking_params 

post :create , undertaking: undertaking_params 

からあなたのRSpecの行を修正します。

rspecにAskingを作成していないことがわかります。だから、あなたはまず一つを作成してから、そのIDをpost :createコールで渡す必要があります。あなたはAskingモデルのファクトリを定義している与えられた、工場出荷時の女の子、とあなたのRSpecのでAskingオブジェクトを作成することができます

UPDATE

asking = create(:asking) 
post :create, asking_id: asking.id, ... 
+0

ありがとうございます!できます!! –

関連する問題