【问题标题】:Code works but test fails代码有效,但测试失败
【发布时间】:2009-07-29 18:40:48
【问题描述】:

我有一个测试失败,即使我在浏览器中测试该操作确实有效。我的测试似乎有问题。

我正在使用 Shoulda 和固定装置。

require 'test_helper'

class AddressesControllerTest < ActionController::TestCase
  context 'on PUT to :update' do
    setup do
      put(:update, {
          :id => addresses(:mary_publics_address).id,
          :street1 => '123 Now St.'
        }, { :user_id => users(:stan).id})
    end
    should 'update the Address' do
      a = Address.find(addresses(:mary_publics_address).id)
      assert(a.street1 == '123 Now St.', 'Attribute did not get updated.')
    end
  end
end

“属性未更新”失败。

这里是被测控制器代码:

class AddressesController < ApplicationController
  def update
    @address = Address.find(params[:id])
    @address.update_attributes!(params[:address])
    render(:text => "Address with ID #{params[:id]} updated")
  end
end

【问题讨论】:

  • “代码有效,但测试失败”。这正是我在测试团队打电话时的第一个想法:P
  • a.street1 会返回什么?
  • 只是为了澄清我的最后评论;我在问 a.street1 实际上返回了什么,而不仅仅是假设是什么。作为测试人员,从测试中打印出预期值和实际值可能非常有见地。
  • 好的,打印出来。以应该被替换的原始值返回。 (“东圣马科斯大道 100 号,套房 412”)

标签: ruby-on-rails unit-testing tdd shoulda


【解决方案1】:

我看不到您在测试中传递给您的操作的参数中指定的 params[:address]。在我看来应该是这样的:

put(:update, {
        :id => addresses(:mary_publics_address).id,
        :address => { :street1 => '123 Now St.' }
      }, { :user_id => users(:stan).id})

我怀疑您的street1 地址字段在您的表单中正确命名为address[street1],这就是它通过浏览器工作的原因。

【讨论】:

    猜你喜欢
    • 2010-11-19
    • 2022-11-06
    • 2021-02-16
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 2019-03-07
    相关资源
    最近更新 更多