2016-12-28 34 views
0

我真的被困在這裏。我有一個Language模式,即獲取此方法更新:當我在我的本地服務器上運行它,對象被更新Rails 5測試不會重現PATCH上的實際行爲

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的小費。