Toto je repost mého článku z 4.3.2017 na UOL Devs Blogu zde: https://medium.com/blog-uoldevs-cz/validace-xml-pomoci-nokogiri-1446dbad437e.

Validace XML pomoci Nokogiri

Pokud v Ruby generujete XML, tak je dost možné, že pracujete s Nokogiri. S tím není problém generovat i složitější dokumenty. Jak ale otestujete, že se XML vygenerovalo správně? Jedna z možností je porovnat XML oproti nějaké fixture. To je jednoduché a rychlé. Se složitějšími dokumenty to už tak použitelné ale není. Přitom pokud máte k dispozici XSD schéma, tak s Nokogiri jde struktura hlídat velice jednoduše.

Jako spousta ostatních, i my řešímě EET. Tržby se evidují odesláním XML zprávy na SOAP API. Ministerstvo nám strukturu zprávy specifikovalo pomocí XSD souboru. Pojďme se podívát, jak ho můžeme použít v testech k ověření, že naše zpráva bude mít vždy správnou strukturu.

Pro generování zpráv máme následující třídu:

Vygenerované XML můsí odpovídat struktuře Z XSD schéma. S Nokogiri to můžeme do testu úplně jednoduše vložit takto:

Protože knihovna nejspíš není ještě úplně odladěná, tak výsledkem testu je pak fail s vypsáním konkrétních chyb:

Takže teď přesně víme, co a kde musíme upravit, aby byla zpráva v pořádku. Mnohem lepší, než porovnávání oproti fixture. :)

RSpec matcher

No a nakonec si můžeme pro RSpec ještě nadefinovat speciální matcher, který zpřehlední testy a validační chyby vypíše hezky červeně jako jiné faily:

a výstup: