我有一个测试失败,即使我在浏览器中测试它时操作确实有效。我的测试出了点问题,看起来像。
我正在使用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
答案 0 :(得分:2)
我无法在测试中传递给您的操作的参数中看到指定的参数[:地址]。在我看来它应该是:
put(:update, {
:id => addresses(:mary_publics_address).id,
:address => { :street1 => '123 Now St.' }
}, { :user_id => users(:stan).id})
我怀疑您的street1
地址字段在表单中被正确命名为address[street1]
,这就是它通过浏览器工作的原因。