2017-01-03 5 views
0

My spec/controllers/askings_spec.rbは以下のとおりです。作成アクションのRspecエラー

require 'rails_helper' 
    RSpec.describe AskingsController, type: :controller do 
    describe'Post #create' do 
     before do 
      @user=create(:user) 
      login_user(@user) 
     end 
     let(:asking_params) do 
      attributes_for(:asking) 
     end 
     it 'should make askings +1' do 
      expect{post :create, asking: asking_params}.to change(Asking, :count).by(1) 
     end 
     it 'create response' do 
     post :create, asking: asking_params 
     expect(response).to redirect_to(assigns(:asking)) 
     end 
    end 

と私のモデル/ asking.rbは以下のとおりです。

と私のrspec/factories/askings.rbは以下のとおりです。

FactoryGirl.define do 
    factory :asking do 
     association :user 
     title "MyString" 
     content "お願いします" 
     lang "english" 
     person 'ネイティブ限定' 
     sex '男性限定' 
     usepoint 1 
     finished false  
     deadline "2017-1-12" 
     deadline_time 1 
    end 
    end 

私はレールコンソールで以下に(つまり工場を求めている)、それは成功だラインを通過しました。

 Asking.create!(:title=>"MyString", :content=>"お願いします", :lang=>"english", :person=>"ネイティブ限定", :sex=>"男性限定", :usepoint=>1, :finished=>false, :deadline=>"2017-1-12", :deadline_time=>1) 

しかし、私はrspec/controllersにエラーがあります。

 expected #count to have changed by 1, but was changed by 0 

以下。

 Expected response to be a <redirect>, but was <200> 

私が削除

は '検証:deadline_time、プレゼンス:true' のモデル/ asking.rbからは、RSpecのがエラーを持っていません。だから私はエラーがdeadline_timeの原因と思う。レールコンソールでは動作します。なぜ私はそのようなエラーがありますか?私を助けてください。

と私のaskings_controller.rbは以下のとおりです。

 require 'time' 
     class AskingsController < ApplicationController 
     before_action :authenticate_user! , only: [:new , :create , :destroy] 
     def create 
     @asking=Asking.new(asking_params) do |c| 
      c.user=current_user 
     end 
     if @asking.save 
      flash[:success] = "依頼に成功しました。" 
      redirect_to @asking 
     else 
      render 'askings/new' 
     end 
     end 
     private 
      def asking_params 
      params.require(:asking).permit(:title, :content , :lang, :person , :sex , :usepoint , :deadline) 
      end 
    end 
+0

を変更してみてくださいだけでなく、コントローラのコードを投稿してください。 – 31piy

+0

申し訳ありませんが、私はコントローラコードを追加しました。 –

答えて

0

あなたはasking_paramsで許可パラメータの1つとしてdeadline_timeを持っていないので、それは「新しい」方法で渡されていません。

asking_paramsに...

def asking_params 
    params.require(:asking).permit(:title, :content , :lang, :person , :sex , :usepoint , :deadline, :deadline_time) 
end 
+0

ああ、ありがとう、それは動作します!私はそれを完全に見落としていた。 –

関連する問題