Код работает, но тест не проходит

У меня есть тест, который не работает, хотя операция действительно работает, когда я тестирую ее в браузере. Что-то не так с моим тестом, похоже.

Я использую 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

person Ethan    schedule 29.07.2009    source источник
comment
Код работает, но тест не проходит. Это именно моя первая мысль, когда звонит тестовая команда :P   -  person nik    schedule 29.07.2009
comment
с чем возвращается a.street1?   -  person Steven    schedule 29.07.2009
comment
Просто чтобы уточнить мой последний комментарий; Я спрашиваю, что на самом деле возвращает a.street1, а не только то, каково предположение. Для тех, кто тестирует, распечатка ожидаемого и фактического значения теста может быть очень полезной.   -  person Steven    schedule 29.07.2009
comment
Хорошо, распечатал. Возвращается с исходным значением, которое должно было быть заменено. (бульвар Ист-Сан-Маркос, 100, офис 412)   -  person Ethan    schedule 29.07.2009


Ответы (1)


Я не вижу params[:address], указанного в параметрах, которые вы передаете своему действию в тесте. Мне кажется, так и должно быть:

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

Я подозреваю, что ваше адресное поле street1 правильно названо в вашей форме как address[street1], поэтому оно работает через браузер.

person Shadwell    schedule 29.07.2009