Frage

Ich habe einen test, der fehlschlägt, obwohl der Betrieb funktioniert tatsächlich, wenn ich es testen in dem browser.Etwas falsch mit meinem test, der wie folgt aussieht.

Ich bin mit Shoulda und Leuchten.

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

Schlägt fehl mit "Attribut nicht aktualisiert werden."

Hier ist der controller-code testen unter:

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
War es hilfreich?

Lösung

Ich kann nicht sehen params[:address] angegeben, der Parameter, den Sie übergeben, um Ihre Aktion in den test.Es sieht für mich wie es sein sollte:

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

Ich vermute, Ihr street1 das Feld Adresse ist richtig benannt, in Ihrer form als address[street1] das ist, warum es funktioniert über den browser.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top