diff --git a/doc/api/cli.md b/doc/api/cli.md index 798400ade85f1d..090a73e45a381e 100644 --- a/doc/api/cli.md +++ b/doc/api/cli.md @@ -1512,6 +1512,8 @@ loading phase, it will always raise it as an uncaught exception. added: v18.8.0 --> +> Stability: 1 - Experimental + Force updating snapshot files for [`assert.snapshot()`][] ### `--use-bundled-ca`, `--use-openssl-ca` diff --git a/lib/internal/assert/snapshot.js b/lib/internal/assert/snapshot.js index 70af1fd4e63ca7..e331f7d9fcde0e 100644 --- a/lib/internal/assert/snapshot.js +++ b/lib/internal/assert/snapshot.js @@ -51,7 +51,6 @@ function getTarget() { } function serializeName(name) { - validateString(name, 'name'); return StringPrototypeReplace(`${name}`, kKeyDelimiter, '_'); } @@ -109,12 +108,13 @@ async function getSnapshot() { } -async function snapshot(input, name) { +async function snapshot(value, name) { + validateString(name, 'name'); + validateString(value, 'value'); const snapshot = await getSnapshot(); counter = counter + 1; name = serializeName(name); - const value = inspect(input); if (snapshot === kInitialSnapshot) { await writeSnapshot({ name, value }); } else if (snapshot.has(name)) { diff --git a/test/fixtures/assert-snapshot/non-existing-name.snapshot b/test/fixtures/assert-snapshot/non-existing-name.snapshot index b01e434d6d2e8b..68d95b431dd919 100644 --- a/test/fixtures/assert-snapshot/non-existing-name.snapshot +++ b/test/fixtures/assert-snapshot/non-existing-name.snapshot @@ -1,5 +1,5 @@ another name: -'test' +test #*#*#*#*#*#*#*#*#*#*#*# name: -'test' \ No newline at end of file +test \ No newline at end of file diff --git a/test/fixtures/assert-snapshot/random.snapshot b/test/fixtures/assert-snapshot/random.snapshot index d0912a53246cd9..552a3bce44afb3 100644 --- a/test/fixtures/assert-snapshot/random.snapshot +++ b/test/fixtures/assert-snapshot/random.snapshot @@ -1,5 +1,5 @@ random1: -'Random Value: *' +Random Value: * #*#*#*#*#*#*#*#*#*#*#*# random2: -'Random Value: *' \ No newline at end of file +Random Value: * \ No newline at end of file diff --git a/test/fixtures/assert-snapshot/serialize.mjs b/test/fixtures/assert-snapshot/serialize.mjs deleted file mode 100644 index 6f33a7a398ad9a..00000000000000 --- a/test/fixtures/assert-snapshot/serialize.mjs +++ /dev/null @@ -1,11 +0,0 @@ -import assert from 'node:assert'; - -function fn() { - this.should.be.a.fn(); - return false; -} - -await assert.snapshot(fn, 'function'); -await assert.snapshot({ foo: "bar" }, 'object'); -await assert.snapshot(new Set([1, 2, 3]), 'set'); -await assert.snapshot(new Map([['one', 1], ['two', 2]]), 'map'); diff --git a/test/fixtures/assert-snapshot/serialize.snapshot b/test/fixtures/assert-snapshot/serialize.snapshot deleted file mode 100644 index e70541d9b17ef5..00000000000000 --- a/test/fixtures/assert-snapshot/serialize.snapshot +++ /dev/null @@ -1,11 +0,0 @@ -function: -[Function: fn] -#*#*#*#*#*#*#*#*#*#*#*# -object: -{ foo: 'bar' } -#*#*#*#*#*#*#*#*#*#*#*# -set: -Set(3) { 1, 2, 3 } -#*#*#*#*#*#*#*#*#*#*#*# -map: -Map(2) { 'one' => 1, 'two' => 2 } \ No newline at end of file diff --git a/test/fixtures/assert-snapshot/value-changed.snapshot b/test/fixtures/assert-snapshot/value-changed.snapshot index 2f574435b93709..c971f873ae12b7 100644 --- a/test/fixtures/assert-snapshot/value-changed.snapshot +++ b/test/fixtures/assert-snapshot/value-changed.snapshot @@ -1,2 +1,2 @@ snapshot: -'original' \ No newline at end of file +original \ No newline at end of file diff --git a/test/parallel/test-assert-snapshot.mjs b/test/parallel/test-assert-snapshot.mjs index 7382a0fa3633ad..8e27070730d89a 100644 --- a/test/parallel/test-assert-snapshot.mjs +++ b/test/parallel/test-assert-snapshot.mjs @@ -44,7 +44,7 @@ describe('assert.snapshot', { concurrency: true }, () => { await unlink(snapshotPath); assert.strictEqual(stderr, ''); assert.strictEqual(code, 0); - assert.match(snapshot, /^name:\r?\n'test'$/); + assert.match(snapshot, /^name:\r?\ntest$/); }); it('should write multiple snapshots', async () => { @@ -52,20 +52,20 @@ describe('assert.snapshot', { concurrency: true }, () => { await unlink(snapshotPath); assert.strictEqual(stderr, ''); assert.strictEqual(code, 0); - assert.match(snapshot, /^name:\n'test'\r?\n#\*#\*#\*#\*#\*#\*#\*#\*#\*#\*#\*#\r?\nanother name:\r?\n'test'$/); + assert.match(snapshot, /^name:\ntest\r?\n#\*#\*#\*#\*#\*#\*#\*#\*#\*#\*#\*#\r?\nanother name:\r?\ntest$/); }); it('should succeed running multiple times', async () => { let result = await spawnFixture(fixtures.path('assert-snapshot/single.mjs'), false); assert.strictEqual(result.stderr, ''); assert.strictEqual(result.code, 0); - assert.match(result.snapshot, /^snapshot:\r?\n'test'$/); + assert.match(result.snapshot, /^snapshot:\r?\ntest$/); result = await spawnFixture(fixtures.path('assert-snapshot/single.mjs')); await unlink(result.snapshotPath); assert.strictEqual(result.stderr, ''); assert.strictEqual(result.code, 0); - assert.match(result.snapshot, /^snapshot:\r?\n'test'$/); + assert.match(result.snapshot, /^snapshot:\r?\ntest$/); }); it('should fail when name is not provided', async () => { @@ -82,7 +82,7 @@ describe('assert.snapshot', { concurrency: true }, () => { const { code, stderr, snapshot } = await spawnFixture(fixtures.path('assert-snapshot/value-changed.mjs')); assert.match(stderr, /AssertionError \[ERR_ASSERTION\]/); assert.strictEqual(code, 1); - assert.match(snapshot, /^snapshot:\r?\n'original'$/); + assert.match(snapshot, /^snapshot:\r?\noriginal$/); }); it('should fail when snapshot does not contain a named snapshot', async () => { @@ -90,7 +90,7 @@ describe('assert.snapshot', { concurrency: true }, () => { assert.match(stderr, /AssertionError \[ERR_ASSERTION\]/); assert.match(stderr, /Snapshot "non existing" does not exist/); assert.strictEqual(code, 1); - assert.match(snapshot, /^another name:\r?\n'test'\r?\n#\*#\*#\*#\*#\*#\*#\*#\*#\*#\*#\*#\r?\nname:\r?\n'test'$/); + assert.match(snapshot, /^another name:\r?\ntest\r?\n#\*#\*#\*#\*#\*#\*#\*#\*#\*#\*#\*#\r?\nname:\r?\ntest$/); }); it('should snapshot a random replaced value', async () => { @@ -101,14 +101,6 @@ describe('assert.snapshot', { concurrency: true }, () => { assert.strictEqual(snapshot, originalSnapshot); }); - it('should serialize values', async () => { - const originalSnapshot = await readFile(fixtures.path('assert-snapshot/serialize.snapshot'), 'utf8'); - const { stderr, code, snapshot } = await spawnFixture(fixtures.path('assert-snapshot/serialize.mjs')); - assert.strictEqual(stderr, ''); - assert.strictEqual(code, 0); - assert.strictEqual(snapshot, originalSnapshot); - }); - it('should override snapshot when passing --update-assert-snapshot', async () => { const filename = 'updated.mjs'; await writeFile(getSnapshotPath(filename), 'snapshot:\n\'test\''); @@ -116,7 +108,7 @@ describe('assert.snapshot', { concurrency: true }, () => { filename, ['--update-assert-snapshot']); assert.strictEqual(stderr, ''); assert.strictEqual(code, 0); - assert.match(snapshot, /^snapshot:\r?\n'changed'$/); + assert.match(snapshot, /^snapshot:\r?\nchanged$/); }); it('snapshot file should have the name of the module - esm', async () => {