【发布时间】:2016-12-28 07:37:32
【问题描述】:
我真的被困在这里了。我有一个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
当我在本地服务器上运行它时,成功更新的预期行为会重现,对象得到更新,flash 出现并重定向到 @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 gems 可能会导致一些路由故障?另一方面,我的Language 路线非常简单:
resources :languages, concerns: :paginatable(这里关注的是人类可读的 URL 格式)。请记住,一切都按预期工作,只有测试因某种原因失败...提前致谢!
【问题讨论】:
-
在调用
patch方法后添加puts @response.body并在此处发布输出。
标签: ruby-on-rails testing devise