【问题标题】:Rails 5 test doesn't reproduce actual behaviour on PATCHRails 5 测试无法重现 PATCH 上的实际行为
【发布时间】: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


【解决方案1】:

原来我只是在更新哈希中丢失了一个必需的参数。使用了 Arun Kumar 在patch 之后添加puts @response.body 的技巧。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    相关资源
    最近更新 更多