Rails 5测试不会重现PATCH上的实际行为

时间:2016-12-28 07:37:32

标签: ruby-on-rails testing devise

我真的被困在这里了。我有一个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格式)。请记住,一切都按预期工作,只有测试因某种原因失败...提前致谢!

1 个答案:

答案 0 :(得分:1)

事实证明我在更新哈希中缺少必需的参数。使用Arun Kumar在puts @response.body之后添加patch的提示。