2016-12-28 3 views
0

私は本当にここにこだわっています。私はこの方法で更新されますLanguageモデルを持っている:私は私のローカルサーバー上でそれを実行したときにRails 5のテストで実際の動作が再現されない

def update 
    @language = Language.find(params[:id]) 

    if @language.update_attributes(language_params) 
     flash[:success] = 'Language information updated.' 
     redirect_to @language 
    else 
     @skill_errors = @language.errors 
     render 'edit' 
    end 
    end 

成功した更新の意図行動は、オブジェクトが更新される再現し、フラッシュが表示され、@languageが起こるにリダイレクトします。

しかし、私は200: Successという応答しか得ておらず、オブジェクトは更新されません。ここでは、テストコードは次のとおりです。

test 'should allow update when logged in as admin user' do 
    sign_in(@admin) 
    patch language_path(@ruby_language), params: { language: { name: 'Test'} } 
    assert_not flash.empty? 
    assert_redirected_to @ruby_language 
    @ruby_language.reload 
    assert_equal 'Test', @ruby_language.name 
    end 

@admin@ruby_languageは備品で定義されています。このテストのすべてのアサートは、最後のものを含めて、失敗します。reloadです。私の推測では、Deviseおよび/またはKaminariの宝石を使用したことによるルーティングの不具合がありますか?一方、私のLanguageのルートは非常に単純です: resources :languages, concerns: :paginatable(人間が判読できるURLのフォーマットについてはここを参照してください)。すべてが意図どおりに機能することを覚えておいてください。何らかの理由でテストが失敗するだけです...事前に感謝してください!

+0

'patch'メソッドを呼び出した後に' puts @ response.body'を追加し、ここに出力を投稿してください。 –

答えて

1

私は、更新ハッシュで必要なパラメータが不足していることが判明しました。 Arun Kumarの先端チップpatchの後にputs @response.bodyを追加しました。

関連する問題