代码之家  ›  专栏  ›  技术社区  ›  Ethan

代码有效,但测试失败

  •  0
  • Ethan  · 技术社区  · 15 年前

    我有一个测试失败了,即使当我在浏览器中测试它时操作实际上是有效的。我的测试好像有问题。

    我用的是Shoulda和Fixtures。

    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 回复  |  直到 15 年前
        1
  •  2
  •   Shadwell    15 年前

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

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

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