Comments (4)
The matchers I used in the example are custom matchers:
func MatchAny[T any](val any) (any, error) {
_, ok := val.(T)
if !ok {
return nil, fmt.Errorf("expected %T but got %T", *new(T), val)
}
return fmt.Sprintf("<Any %T>", val), nil
}
func MatchTime(rfc string) func(val any) (any, error) {
return func(val any) (any, error) {
if _, err := MatchAny[string](val); err != nil {
return nil, err
}
_, err := time.Parse(rfc, val.(string))
if err != nil {
return nil, fmt.Errorf("expected time but got %T", val)
}
return fmt.Sprintf("<Str %s>", rfc), nil
}
}
Maybe not the cleanest solution but works pretty nice :-D
from go-snaps.
I really like it 😄 Especially the type check with the generic function is really smart. Might try to create a MatchType
matcher based on your idea 👍
from go-snaps.
Hey 👋 Thanks for opening this issue.
Just to understand your use case when you say
save a snapshot to a different file
do you mean save the snapshot to it's own seperate file?
I was thinking about providing some configuration at test level about this but I don't want to break the current signature and keep compatibility. Something I had in mind was providing chained methods so it could look like
# or a similar method name
snaps.MatchJSON(t, data, matchers...).SaveSeparately()
and save each snapshot on a file name e.g. TestMatchJSON/should_make_a_json_object_snapshot _1.snap
would that work for your use case ? Or are you looking at something different ?
On another note I am curious on the matchers you use on your example. They look interesting 😄
from go-snaps.
This may generate a lot of files, i was thinking on 1 file per test name(this may include multiple snapshots) or a way to define the name of the file where the snapshot will be saved so you can group multiple snapshots in the same filename.
Using chained methods may be a very clean solution.
from go-snaps.
Related Issues (20)
- Issues with diffs HOT 2
- Allow configuration of snapshot file names / ending HOT 2
- Behaviour changed? Secrets now redacted? HOT 2
- Testcase is intially written, but fails on updating the test HOT 3
- go-snaps `permission denied` when running from packagestest HOT 1
- [Feature Request ]: support gomock matcher HOT 6
- [Bug]: Cryptic error message for snaps saved using "CRLF" instead of "LF" line ending HOT 3
- [Feature Request ]: Add env variable to error if .snap is missing HOT 3
- [Feature Request]: MatchYAML HOT 1
- [Bug]: snapshots of big slices could not be loaded back HOT 5
- [Feature Request]: Expose ability to update snapshot via the API HOT 2
- Is snapshort sorting a thing? HOT 3
- [Feature Request]: Add docs on path syntax HOT 1
- [Bug]: Nested arrays keys HOT 3
- Snapshots combined with using `-count` HOT 5
- Consider Adding Named Snapshots HOT 1
- Why specify the exact go version (`1.21.0`) HOT 3
- [Bug]: race condition with cleanup and parallel HOT 6
- [Bug]: CRLF not respected in snaps HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from go-snaps.