私は本当にここにこだわっています。私はこの方法で更新されます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のフォーマットについてはここを参照してください)。すべてが意図どおりに機能することを覚えておいてください。何らかの理由でテストが失敗するだけです...事前に感謝してください!
'patch'メソッドを呼び出した後に' puts @ response.body'を追加し、ここに出力を投稿してください。 –