@jsenv/snapshot 2.6.9 → 2.6.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsenv/snapshot",
3
- "version": "2.6.9",
3
+ "version": "2.6.10",
4
4
  "description": "Snapshot testing",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -35,11 +35,11 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "@jsenv/assert": "4.1.13",
38
- "@jsenv/ast": "6.2.11",
38
+ "@jsenv/ast": "6.2.12",
39
39
  "@jsenv/exception": "1.0.1",
40
- "@jsenv/filesystem": "4.9.6",
40
+ "@jsenv/filesystem": "4.9.7",
41
41
  "@jsenv/terminal-recorder": "1.4.2",
42
- "@jsenv/urls": "2.5.0",
42
+ "@jsenv/urls": "2.5.1",
43
43
  "@jsenv/utils": "2.1.2",
44
44
  "ansi-regex": "6.0.1",
45
45
  "pixelmatch": "6.0.0",
@@ -7,10 +7,27 @@ import { createCaptureSideEffects } from "./create_capture_side_effects.js";
7
7
  import { renderSideEffects } from "./render_side_effects.js";
8
8
 
9
9
  export const snapshotSideEffects = (
10
+ sourceFileUrl,
10
11
  fn,
11
- sideEffectFileUrl,
12
- { outDirectoryUrl, errorStackHidden, ...captureOptions } = {},
12
+ {
13
+ sideEffectFileUrl,
14
+ sideEffectFilePattern = "./output/<basename>.md",
15
+ outDirectoryUrl,
16
+ errorStackHidden,
17
+ ...captureOptions
18
+ } = {},
13
19
  ) => {
20
+ if (sideEffectFileUrl === undefined) {
21
+ const basename = urlToBasename(sourceFileUrl, true);
22
+ const sideEffectFileRelativeUrl = sideEffectFilePattern.replaceAll(
23
+ "<basename>",
24
+ basename,
25
+ );
26
+ sideEffectFileUrl = new URL(sideEffectFileRelativeUrl, sourceFileUrl);
27
+ } else {
28
+ sideEffectFileUrl = new URL(sideEffectFileUrl, sourceFileUrl);
29
+ }
30
+
14
31
  const captureSideEffects = createCaptureSideEffects(captureOptions);
15
32
  if (outDirectoryUrl === undefined) {
16
33
  outDirectoryUrl = new URL(
@@ -1,4 +1,4 @@
1
- import { urlToFilename, urlToRelativeUrl } from "@jsenv/urls";
1
+ import { urlToBasename, urlToFilename, urlToRelativeUrl } from "@jsenv/urls";
2
2
  import {
3
3
  takeDirectorySnapshot,
4
4
  takeFileSnapshot,
@@ -9,20 +9,22 @@ import { renderSideEffects, renderSmallLink } from "./render_side_effects.js";
9
9
 
10
10
  /**
11
11
  * Generate a markdown file describing all test side effects. When executed in CI throw if there is a diff.
12
+ * @param {URL} sourceFileUrl
12
13
  * @param {Function} fnRegisteringTest
13
- * @param {URL} snapshotFileUrl
14
14
  * @param {Object} snapshotTestsOptions
15
- * @param {string|url} snapshotTestsOptions.sourceDirectoryUrl
15
+ * @param {string|url} snapshotTestsOptions.sideEffectFileUrl
16
+ * @param {string|url} snapshotTestsOptions.rootDirectoryUrl
16
17
  * @return {Array.<Object>} sideEffects
17
18
  */
18
19
  export const snapshotTests = async (
20
+ sourceFileUrl,
19
21
  fnRegisteringTest,
20
- snapshotFileUrl,
21
22
  {
23
+ sideEffectFileUrl,
24
+ sideEffectFilePattern = "./<basename>/<basename>.md",
22
25
  rootDirectoryUrl,
23
26
  generatedBy = true,
24
27
  linkToSource = true,
25
- sourceFileUrl,
26
28
  linkToEachSource,
27
29
  errorStackHidden,
28
30
  logEffects,
@@ -30,6 +32,17 @@ export const snapshotTests = async (
30
32
  throwWhenDiff = process.env.CI,
31
33
  } = {},
32
34
  ) => {
35
+ if (sideEffectFileUrl === undefined) {
36
+ const basename = urlToBasename(sourceFileUrl, true);
37
+ const sideEffectFileRelativeUrl = sideEffectFilePattern.replaceAll(
38
+ "<basename>",
39
+ basename,
40
+ );
41
+ sideEffectFileUrl = new URL(sideEffectFileRelativeUrl, sourceFileUrl);
42
+ } else {
43
+ sideEffectFileUrl = new URL(sideEffectFileUrl, sourceFileUrl);
44
+ }
45
+
33
46
  const testMap = new Map();
34
47
  const onlyTestMap = new Map();
35
48
  const test = (scenario, fn, options) => {
@@ -47,7 +60,7 @@ export const snapshotTests = async (
47
60
  filesystemEffects,
48
61
  });
49
62
  let markdown = "";
50
- markdown += `# ${urlToFilename(snapshotFileUrl)}`;
63
+ markdown += `# ${urlToFilename(sideEffectFileUrl)}`;
51
64
  if (generatedBy) {
52
65
  let generatedByLink = renderSmallLink(
53
66
  {
@@ -58,7 +71,7 @@ export const snapshotTests = async (
58
71
  prefix: "Generated by ",
59
72
  suffix:
60
73
  linkToSource && sourceFileUrl
61
- ? generateExecutingLink(sourceFileUrl, snapshotFileUrl)
74
+ ? generateExecutingLink(sourceFileUrl, sideEffectFileUrl)
62
75
  : "",
63
76
  },
64
77
  );
@@ -76,7 +89,7 @@ export const snapshotTests = async (
76
89
  });
77
90
  const outDirectoryUrl = new URL(
78
91
  `./${asValidFilename(scenario)}/`,
79
- snapshotFileUrl,
92
+ sideEffectFileUrl,
80
93
  );
81
94
  const outDirectorySnapshot = takeDirectorySnapshot(outDirectoryUrl, {
82
95
  pattern: {
@@ -85,7 +98,7 @@ export const snapshotTests = async (
85
98
  },
86
99
  });
87
100
  const sideEffectsMarkdown = renderSideEffects(sideEffects, {
88
- sideEffectFileUrl: snapshotFileUrl,
101
+ sideEffectFileUrl,
89
102
  outDirectoryUrl,
90
103
  generatedBy: false,
91
104
  titleLevel: 3,
@@ -94,15 +107,15 @@ export const snapshotTests = async (
94
107
  outDirectorySnapshot.compare(throwWhenDiff);
95
108
  markdown += sideEffectsMarkdown;
96
109
  }
97
- const sideEffectFileSnapshot = takeFileSnapshot(snapshotFileUrl);
110
+ const sideEffectFileSnapshot = takeFileSnapshot(sideEffectFileUrl);
98
111
  sideEffectFileSnapshot.update(markdown, {
99
112
  mockFluctuatingValues: false,
100
113
  throwWhenDiff,
101
114
  });
102
115
  };
103
116
 
104
- const generateExecutingLink = (sourceFileUrl, snapshotFileUrl) => {
105
- const relativeUrl = urlToRelativeUrl(sourceFileUrl, snapshotFileUrl, {
117
+ const generateExecutingLink = (sourceFileUrl, sideEffectFileUrl) => {
118
+ const relativeUrl = urlToRelativeUrl(sourceFileUrl, sideEffectFileUrl, {
106
119
  preferRelativeNotation: true,
107
120
  });
108
121
  const href = `${relativeUrl}`;