La respuesta de ntalbott muestra una acción de obtención. La acción posterior es un poco más complicada; si desea enviar el nuevo objeto como un mensaje XML y tener los atributos XML en el hash de params en el controlador, debe obtener los encabezados correctos. He aquí un ejemplo (Rails 2.3.x):
class TruckTest < ActionController::IntegrationTest
def test_new_truck
paint_color = 'blue'
fuzzy_dice_count = 2
truck = Truck.new({:paint_color => paint_color, :fuzzy_dice_count => fuzzy_dice_count})
@headers ||= {}
@headers['HTTP_ACCEPT'] = @headers['CONTENT_TYPE'] = 'application/xml'
post '/trucks.xml', truck.to_xml, @headers
#puts @response.body
assert_select 'truck>paint_color', paint_color
assert_select 'truck>fuzzy_dice_count', fuzzy_dice_count.to_s
end
end
Se puede ver aquí que el segundo argumento de la publicación, no tiene que ser un hash de parámetros; puede ser una cadena (que contiene XML), si los encabezados son correctos. El tercer argumento, @headers, es la parte que me llevó a investigar mucho para entender.
(Tenga en cuenta también el uso de to_s al comparar un valor entero en assert_select.)
Esa parte que sé, en busca de una prueba de integración A..Z –
Eso assert_equal también es muy frágil. No hay garantía de orden de elemento o atributo; si cambia, tu prueba se romperá. La comparación de cadenas literales no es la forma correcta de verificar la igualdad de los árboles XML. – bjnord