代码有效但测试失败

时间:2009-07-29 18:40:49

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

我有一个测试失败,即使我在浏览器中测试它时操作确实有效。我的测试出了点问题,看起来像。

我正在使用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

1 个答案:

答案 0 :(得分:2)

我无法在测试中传递给您的操作的参数中看到指定的参数[:地址]。在我看来它应该是:

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

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