gkampitakis / go-snaps

Jest-like snapshot testing in Go 📸
https://pkg.go.dev/github.com/gkampitakis/go-snaps
MIT License
174 stars 6 forks source link

[Feature Request]: MatchYAML #74

Open pmarchini opened 1 year ago

pmarchini commented 1 year ago

🚀 Feature Proposal

Considering the existence of the MatchJSON function, I suggest to introduce a similar implementation for YAML files: MatchYAML.

If agreeable, I would like to collaborate implementing this feature.

Motivation

I'm using this library for a project where I need to handle some data via JSON and YAML and I'd like to have the same functionality that I've with MatchJSON

Example

No response

gkampitakis commented 1 year ago

Hey 👋 Thanks for opening this issue and using go-snaps. I have thought about it but wasn't sure if it's a functionality people would use.

If agreeable, I would like to collaborate implementing this feature.

Not sure if you had any look on the MatchJSON and how is implemented. Under the hood it's using gjson and sjson for accessing values and assinging values into keys. Unfortunately yaml doesn't have some similar support so we should built something similarto support this functionality ( e.g. get a specific key and set a specific key ).

That said happy to discuss about it.

markussiebert commented 1 month ago

Hey 👋 do you think It would be possible to add an option, to just render the snapshot as yaml? That would be handy!

gkampitakis commented 1 month ago

You mean save it as yaml on the snap file? There is this option now where you can do

snaps.WithConfig(snaps.Ext(".yaml")). MatchStandaloneSnapshot(t, <yaml string>)

This will create a file <name>.snap.yaml with your contents. Or you had something else in mind?

markussiebert commented 1 month ago

Ok, now the file has the ending .yaml, but is not a valid yaml file...

What I am Looking for is something like this

rspYml, rspYmlErr := yaml.Marshal(rsp)
s.MatchSnapshot(t, string(rspYml), rspYmlErr)

this is working :-) but one line would be nice... but really - as I now have something working, it's not urgent :-)

Really like your snaps library!

gkampitakis commented 1 month ago

Okay I see your point. Yes that would be something that I would like to built inside the MatchYAML potentially similar to what MatchJSON does https://github.com/gkampitakis/go-snaps/blob/main/snaps/matchJSON.go#L143-L160.

I can introduce the MatchYAML method that will do that, but won't do anything else apart from that, meaning no matchers support as in JSON.

As per my previous comment

Not sure if you had any look on the MatchJSON and how is implemented. Under the hood it's using gjson and sjson for accessing values and assinging values into keys. Unfortunately yaml doesn't have some similar support so we should built something similarto support this functionality ( e.g. get a specific key and set a specific key ).