我真的被困在这里了。我有一个Language
模型,在此方法中更新:
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 :(得分:1)
事实证明我在更新哈希中缺少必需的参数。使用Arun Kumar在puts @response.body
之后添加patch
的提示。