Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hyp3rflow/snap
SNAPshot library for Deno.
https://github.com/hyp3rflow/snap
deno snapshot test testing
Last synced: 6 days ago
JSON representation
SNAPshot library for Deno.
- Host: GitHub
- URL: https://github.com/hyp3rflow/snap
- Owner: hyp3rflow
- License: other
- Created: 2022-03-16T09:16:25.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-03-17T09:25:55.000Z (almost 3 years ago)
- Last Synced: 2024-12-17T16:13:41.288Z (17 days ago)
- Topics: deno, snapshot, test, testing
- Language: TypeScript
- Homepage:
- Size: 22.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Snap
`Snap` is a test snapshot library for Deno. modified from [klick](https://github.com/sramam/klick).
## Goal
- Implement `assertSnapshot` on testing in [deno_std](https://github.com/denoland/deno_std)
- After accomplished, this repo will not be maintained.## Features
- Two update modes:
1. `update` fine grained update (only filtered tests, even within a single
suite)
2. `refresh` coarse grained update (removes un-exercised snapshots within
suites)
- Simple ability to `mask` variant fields, accessed via json-ptr
- CI aware - does not update snapshots on CI server
- Snapshot files are valid JSON5## Required Permissions
In practice, we'll need to use this:
- `--allow-read`: to read snapshots
- `--allow-write`: to create/update snapshots
- `--unstable`: for `fs` capability from deno std-libCurrent deno implementation does not allow for wild-cards and globs in the
permissions `allow-list`. Ideally, this is the set of permissions `snap` needs:- `--allow-read="./**/*.assertSnapshot"`: to read snapshots
- `--allow-write="./**/*.assertSnapshot"`: to create/update snapshots
- `--unstable`: for `fs` capability from deno std-lib## Usage
### Writing tests
```
import test from "https://deno.land/x/snap/mod.ts";test(`Simple test`, ({ assertSnapshot}) => {
const actual = {
a: 'a',
b: 1
}
assertSnapshot(actual);
actual.c = 'c'
assertSnapshot(actual);
});test(`Test with masks`, ({ assertSnapshot}) => {
const actual = {
a: 'a',
b: 1,
c: {
start: Date.now()
randomArray: [
Math.random(),
Math.random(),
]
}
}
const masks = ['/c/start', '/c/randomArray/*']
assertSnapshot(actual, masks);
});
```Masked snapshot:
```
'Test with masks': {
a: 'a',
b: 1,
c: {
start: '[MASKED number]',
randomArray: [
'[MASKED number]',
'[MASKED number]',
],
},
},
```### Snapshot Management (Exercise from CLI)
#### New snapshots / Validate
Validate existing snapshots or create new snapshots
```
deno test --allow-write --allow-read --unstable
```#### Filtered snapshot update
Only updates snapshots for tests being executed. Honors `ignore` and `only`
attributes from `Deno.TestDefinition````
deno test --allow-write --allow-read --unstable --filter "/.*another.*/" -- --update
```or
```
deno test --allow-write --allow-read --unstable --filter "/.*another.*/" -- --u
```#### Refresh snapshots
Update all snapshots, deleting any un-executed snapshots. Only does so if a
test-suite is executed```
deno test --allow-write --allow-read --unstable -- --refresh
```or
```
deno test --allow-write --allow-read --unstable -- --r
```