2010-04-30 7 views
0

je le test suivant dans mon Rails Application:test XML dans Rails - attributs fixes ordre Builder :: XmlMarkup en rubis -

it "should validate xml" do 
    builder = Builder::XmlMarkup.new 
    builder.server(:name => "myServer", :ip => "192.168.1.1").should == "<server name=\"myServer\" ip=\"192.168.1.1\"/>" 
end 

Le problème est que ce test passe parfois, parce que l'ordre du Les attributs des balises xml sont imprévisibles. Y a-t-il un moyen de forcer cette commande? Y at-il un autre moyen facile de construire xml?

Cet exemple est simplifié, j'ai un gros XML. Mon problème est que je veux faire un test d'intégration, qui compare un appel WebService avec un fichier XML fixe. Sinon, je devrais analyser le xml et vérifier élément par élément dans le XML.

Répondre

4

L'ordre des attributs dans un élément est imprévisible selon la recommandation XML. Donc, si vous avez un test qui s'attend à ce que les attributs soient dans un ordre particulier, ce test est incorrect.

+0

états xml.com (à http://www.xml.com/pub/a/ws/2002/09/ 18/c14n.html? Page = 2) que les attributs sont censés être ordonnés dans l'ordre lexicographique (item 13 sur cette page.) Cela semble entrer en conflit avec d'autres sources. YMMV. – Raels

0

A la fin, je l'ai utilisé l'affirmation .should de have_tag:

it "should validate xml" do 
    builder = Builder::XmlMarkup.new 
    xml = builder.server(:name => "myServer", :ip => "192.168.1.1") 
    xml.should have_tag("server[name=myServer]") 
    xml.should have_tag("server[ip=192.168.1.1]") 
end