La réponse de ntalbott montre une action d'obtention. L'action post est un peu plus compliquée; Si vous souhaitez envoyer le nouvel objet sous forme de message XML et que les attributs XML s'affichent dans le hachage params du contrôleur, vous devez obtenir les en-têtes correctement. Voici un exemple (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
Vous pouvez voir ici que le 2ème argument de poste ne doit pas être un hachage de paramètres; il peut s'agir d'une chaîne (contenant du XML), si les en-têtes ont raison. Le troisième argument, @headers, est la partie qui m'a pris beaucoup de recherches pour comprendre.
(Notez aussi l'utilisation de to_s lorsque l'on compare une valeur entière dans assert_select.)
Cette partie, je sais, la recherche d'un test d'intégration A..Z –
That assert_equal est également très fragile. Il n'y a aucune garantie de l'ordre des éléments ou des attributs; Si cela change, votre test va casser. La comparaison de chaîne littérale n'est pas la bonne façon de vérifier l'égalité des arbres XML. – bjnord