@test2doc/playwright 0.2.2 → 0.3.1
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/README.md +35 -3
- package/dist/DocMeta.js +1 -1
- package/dist/DocMeta.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +58 -20
- package/dist/index.js.map +1 -1
- package/dist/screenshots.d.ts +3 -0
- package/dist/screenshots.d.ts.map +1 -0
- package/dist/screenshots.js +9 -0
- package/dist/screenshots.js.map +1 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +7 -0
- package/dist/utils.js.map +1 -0
- package/package.json +9 -2
package/README.md
CHANGED
|
@@ -68,6 +68,16 @@ export default defineConfig({
|
|
|
68
68
|
},
|
|
69
69
|
],
|
|
70
70
|
|
|
71
|
+
use: {
|
|
72
|
+
baseURL: "http://localhost:5173", // change to whatever port your app starts on
|
|
73
|
+
trace: "on-first-retry",
|
|
74
|
+
},
|
|
75
|
+
webServer: {
|
|
76
|
+
command: "pnpm dev", // change with command to start your server
|
|
77
|
+
url: "http://localhost:5173", // change to whatever port your app starts on
|
|
78
|
+
reuseExistingServer: !process.env.CI,
|
|
79
|
+
},
|
|
80
|
+
|
|
71
81
|
// Optional: Import settings from your main config
|
|
72
82
|
// Uncomment and adjust the path if you want to inherit from your main config
|
|
73
83
|
// ...require('./playwright.config').default,
|
|
@@ -78,21 +88,23 @@ Replace `"./doc/docs"` with a path to the `doc` directory of your Docusaurus app
|
|
|
78
88
|
|
|
79
89
|
##### Add script to run playwright to generate docs
|
|
80
90
|
|
|
81
|
-
Also add a script to build the docs in your project's `package.json
|
|
91
|
+
Also add a script to build the docs in your project's `package.json`.
|
|
92
|
+
|
|
93
|
+
The `TEST2DOC=true` is required to activate the test2doc metadata to pass to the tests in a headless context. For normal test runs you probably don't want the extra noise of the metadata, so leave this out of your standard test run.
|
|
82
94
|
|
|
83
95
|
```json
|
|
84
96
|
{
|
|
85
97
|
...
|
|
86
98
|
"scripts": {
|
|
87
99
|
...
|
|
88
|
-
"docs:generate": "playwright test --config=playwright-test2doc.config.ts"
|
|
100
|
+
"docs:generate": "TEST2DOC=true playwright test --config=playwright-test2doc.config.ts"
|
|
89
101
|
}
|
|
90
102
|
...
|
|
91
103
|
}
|
|
92
104
|
```
|
|
93
105
|
|
|
94
106
|
## Verify installation
|
|
95
|
-
To verify your setup works, run `npm run docs:generate` and check that markdown files appear in your `./doc/docs` directory.
|
|
107
|
+
To verify your setup works, run `npm run docs:generate` and check that markdown files appear in your `./doc/docs` directory, or where you specified the output directory is in the `playwright-test2doc.config.ts` file.
|
|
96
108
|
|
|
97
109
|
## How it works
|
|
98
110
|
|
|
@@ -148,3 +160,23 @@ describe(withDocCategory("Title of Category Route", {
|
|
|
148
160
|
})
|
|
149
161
|
})
|
|
150
162
|
```
|
|
163
|
+
|
|
164
|
+
### Adding Screenshots
|
|
165
|
+
To add screenshots to your documentation use the `screenshot` helper function.
|
|
166
|
+
|
|
167
|
+
Screenshots will be added after the Step block's title and in the order they're generated.
|
|
168
|
+
|
|
169
|
+
```ts
|
|
170
|
+
import { screenshot } from "@test2doc/playwright/screenshots"
|
|
171
|
+
...
|
|
172
|
+
|
|
173
|
+
test.describe(withDocMeta("describe block"), async () => {
|
|
174
|
+
test("test block", async ({ page }, testInfo) => {
|
|
175
|
+
...
|
|
176
|
+
test.step("step block", async () => {
|
|
177
|
+
await page.goto("http://localhost:5173/")
|
|
178
|
+
await screenshot(testInfo, page)
|
|
179
|
+
})
|
|
180
|
+
})
|
|
181
|
+
})
|
|
182
|
+
```
|
package/dist/DocMeta.js
CHANGED
package/dist/DocMeta.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocMeta.js","sourceRoot":"","sources":["../src/DocMeta.ts"],"names":[],"mappings":"AAeA,0BAA0B;AAC1B,IAAI,cAAc,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"DocMeta.js","sourceRoot":"","sources":["../src/DocMeta.ts"],"names":[],"mappings":"AAeA,0BAA0B;AAC1B,IAAI,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM,CAAA;AAEvD;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACnC,cAAc,GAAG,IAAI,CAAA;AACvB,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,MAA8B,EAAE,EAAE,CAC3E,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;AAElE,MAAM,gBAAgB,GAAG,CACvB,KAAa,EACb,MAA2D,EAC3D,QAAsB,EACd,EAAE,CAAC,GAAG,KAAK,aAAa,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAA;AAoCvE,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,KAAa,EACb,QAAoC,EAC5B,EAAE,CACV,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA"}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,14 +10,17 @@ declare class Test2DocReporter implements Reporter {
|
|
|
10
10
|
private docs;
|
|
11
11
|
private docMap;
|
|
12
12
|
private outputDir;
|
|
13
|
+
private screenshotMoveQueue;
|
|
14
|
+
private stepStartTime;
|
|
13
15
|
constructor(options?: Test2DocReporterOptions);
|
|
14
16
|
onBegin(_config: FullConfig, suite: Suite): void;
|
|
15
17
|
private buildDocTree;
|
|
16
|
-
onTestBegin(test: TestCase): void;
|
|
17
18
|
onStepBegin(test: TestCase, _result: TestResult, step: TestStep): void;
|
|
18
|
-
|
|
19
|
+
onStepEnd(test: TestCase, result: TestResult, step: TestStep): void;
|
|
19
20
|
onEnd(): void;
|
|
20
21
|
private buildDocFiles;
|
|
22
|
+
private generateScreenshots;
|
|
23
|
+
private deleteScreenshots;
|
|
21
24
|
private extractDocMetadata;
|
|
22
25
|
private generateHeader;
|
|
23
26
|
private generateTitle;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACT,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACT,MAAM,2BAA2B,CAAA;AAoClC,UAAU,uBAAuB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAwBD;;;GAGG;AACH,cAAM,gBAAiB,YAAW,QAAQ;IACxC,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,aAAa,CAAa;gBAGhC,OAAO,GAAE,uBAER;IAKH,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK;IAUzC,OAAO,CAAC,YAAY;IAyBpB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAQtE,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IA8BnE,KAAK;IAKL,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,cAAc;IAiCtB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,gBAAgB;CA6BzB;AAED,eAAe,gBAAgB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import { mkdirSync, writeFileSync } from "node:fs";
|
|
1
|
+
import { mkdirSync, readdirSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
2
2
|
import { activateTest2Doc } from "./DocMeta.js";
|
|
3
|
+
import { convertToKebabCase } from "./utils.js";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
// TODO: remove this later, here right now as a hacky solution for testing
|
|
3
6
|
activateTest2Doc();
|
|
4
7
|
/**
|
|
5
8
|
* Test2DocReporter is a Playwright reporter that generates documentation
|
|
@@ -9,6 +12,8 @@ class Test2DocReporter {
|
|
|
9
12
|
docs = [];
|
|
10
13
|
docMap = new Map();
|
|
11
14
|
outputDir;
|
|
15
|
+
screenshotMoveQueue = [];
|
|
16
|
+
stepStartTime = Date.now();
|
|
12
17
|
constructor(options = {
|
|
13
18
|
outputDir: "./docs",
|
|
14
19
|
}) {
|
|
@@ -42,29 +47,34 @@ class Test2DocReporter {
|
|
|
42
47
|
}
|
|
43
48
|
return docNode;
|
|
44
49
|
}
|
|
45
|
-
onTestBegin(test) {
|
|
46
|
-
const docSection = this.docMap.get(test.title);
|
|
47
|
-
console.log(`Test started: ${test.title}`, docSection);
|
|
48
|
-
// TODO: Add screenshots here?
|
|
49
|
-
}
|
|
50
50
|
onStepBegin(test, _result, step) {
|
|
51
51
|
const docSection = this.docMap.get(test.title);
|
|
52
52
|
if (docSection && step.category === "test.step" && "steps" in docSection) {
|
|
53
|
+
this.stepStartTime = Date.now();
|
|
53
54
|
docSection.steps.push({ title: step.title });
|
|
54
|
-
// TODO: Add screenshots here?
|
|
55
|
-
console.log("Screen shot here?");
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
console.warn(`No documentation section found for test ${test.id}`);
|
|
59
55
|
}
|
|
60
56
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
.
|
|
65
|
-
.
|
|
57
|
+
onStepEnd(test, result, step) {
|
|
58
|
+
const docSection = this.docMap.get(test.title);
|
|
59
|
+
if (docSection && step.category === "test.step" && "steps" in docSection) {
|
|
60
|
+
const stepEndTime = Date.now();
|
|
61
|
+
result.attachments.forEach((attachment) => {
|
|
62
|
+
const match = attachment.name.match(/test2doc-(\d+).png/) || [];
|
|
63
|
+
const screenshotTime = +(match.at(1) ?? 0);
|
|
64
|
+
console.log("screenshot time, end, and start -> ", screenshotTime, stepEndTime, this.stepStartTime);
|
|
65
|
+
if (screenshotTime < stepEndTime &&
|
|
66
|
+
screenshotTime >= this.stepStartTime &&
|
|
67
|
+
attachment.body) {
|
|
68
|
+
docSection.steps.push({
|
|
69
|
+
screenshot: { name: attachment.name, buffer: attachment.body },
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
this.stepStartTime = Date.now(); // Reset step start time
|
|
74
|
+
}
|
|
66
75
|
}
|
|
67
76
|
onEnd() {
|
|
77
|
+
this.deleteScreenshots(this.outputDir);
|
|
68
78
|
this.docs.forEach((doc) => this.buildDocFiles(doc));
|
|
69
79
|
}
|
|
70
80
|
buildDocFiles(doc, outputDir = this.outputDir) {
|
|
@@ -72,19 +82,41 @@ class Test2DocReporter {
|
|
|
72
82
|
if (metaType === "page") {
|
|
73
83
|
const markdownHeader = this.generateHeader(metadata);
|
|
74
84
|
const markdown = markdownHeader + this.generateMarkdown({ ...doc, title }, 1);
|
|
75
|
-
const filePath = `${outputDir}/${
|
|
85
|
+
const filePath = `${outputDir}/${convertToKebabCase(title)}.md`;
|
|
76
86
|
writeFileSync(filePath, markdown);
|
|
87
|
+
this.generateScreenshots(outputDir);
|
|
77
88
|
}
|
|
78
89
|
else if (metaType === "category") {
|
|
79
|
-
const filePath = `${outputDir}/${
|
|
90
|
+
const filePath = `${outputDir}/${convertToKebabCase(title)}`;
|
|
80
91
|
mkdirSync(filePath, { recursive: true });
|
|
81
92
|
writeFileSync(`${filePath}/__category__.json`, JSON.stringify(metadata, null, 2));
|
|
82
93
|
doc.children.forEach((child) => this.buildDocFiles(child, filePath));
|
|
94
|
+
this.generateScreenshots(filePath);
|
|
83
95
|
}
|
|
84
96
|
else {
|
|
85
97
|
const markdown = this.generateMarkdown(doc, 1);
|
|
86
|
-
const filePath = `${outputDir}/${
|
|
98
|
+
const filePath = `${outputDir}/${convertToKebabCase(doc.title)}.md`;
|
|
87
99
|
writeFileSync(filePath, markdown);
|
|
100
|
+
this.generateScreenshots(outputDir);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
generateScreenshots(output) {
|
|
104
|
+
this.screenshotMoveQueue.forEach(({ name, buffer }) => {
|
|
105
|
+
const dest = `${output}/${name}`;
|
|
106
|
+
writeFileSync(dest, buffer);
|
|
107
|
+
});
|
|
108
|
+
this.screenshotMoveQueue = [];
|
|
109
|
+
}
|
|
110
|
+
deleteScreenshots(output) {
|
|
111
|
+
for (const file of readdirSync(output)) {
|
|
112
|
+
const filePath = join(output, file);
|
|
113
|
+
const stat = statSync(filePath);
|
|
114
|
+
if (stat.isDirectory()) {
|
|
115
|
+
this.deleteScreenshots(filePath);
|
|
116
|
+
}
|
|
117
|
+
else if (stat.isFile() && file.startsWith("test2doc-")) {
|
|
118
|
+
unlinkSync(filePath);
|
|
119
|
+
}
|
|
88
120
|
}
|
|
89
121
|
}
|
|
90
122
|
extractDocMetadata(docTitle) {
|
|
@@ -140,7 +172,13 @@ class Test2DocReporter {
|
|
|
140
172
|
markdown += this.generateTitle(test.title, depth + 1);
|
|
141
173
|
if (test.steps.length > 0) {
|
|
142
174
|
for (const step of test.steps) {
|
|
143
|
-
|
|
175
|
+
if (step.title) {
|
|
176
|
+
markdown += `${step.title}\n`;
|
|
177
|
+
}
|
|
178
|
+
if (step.screenshot) {
|
|
179
|
+
this.screenshotMoveQueue.push(step.screenshot);
|
|
180
|
+
markdown += `\n`;
|
|
181
|
+
}
|
|
144
182
|
}
|
|
145
183
|
markdown += "\n";
|
|
146
184
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Locator, Page, PageAssertionsToHaveScreenshotOptions, PageScreenshotOptions, TestInfo } from "@playwright/test";
|
|
2
|
+
export declare const screenshot: (testInfo: TestInfo, target: Page | Locator, options?: PageScreenshotOptions & PageAssertionsToHaveScreenshotOptions) => Promise<void>;
|
|
3
|
+
//# sourceMappingURL=screenshots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshots.d.ts","sourceRoot":"","sources":["../src/screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,IAAI,EACJ,qCAAqC,EACrC,qBAAqB,EACrB,QAAQ,EACT,MAAM,kBAAkB,CAAA;AAEzB,eAAO,MAAM,UAAU,GACrB,UAAU,QAAQ,EAClB,QAAQ,IAAI,GAAG,OAAO,EACtB,UAAU,qBAAqB,GAAG,qCAAqC,kBASxE,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const screenshot = async (testInfo, target, options) => {
|
|
2
|
+
const filename = `test2doc-${Date.now()}.png`;
|
|
3
|
+
const screenshot = target.screenshot(options);
|
|
4
|
+
await testInfo.attach(filename, {
|
|
5
|
+
body: await screenshot,
|
|
6
|
+
contentType: "image/png",
|
|
7
|
+
});
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=screenshots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshots.js","sourceRoot":"","sources":["../src/screenshots.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC7B,QAAkB,EAClB,MAAsB,EACtB,OAAuE,EACvE,EAAE;IACF,MAAM,QAAQ,GAAG,YAAY,IAAI,CAAC,GAAG,EAAE,MAAM,CAAA;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAE7C,MAAM,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE;QAC9B,IAAI,EAAE,MAAM,UAAU;QACtB,WAAW,EAAE,WAAW;KACzB,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,GAAI,OAAO,MAAM,WAK/C,CAAA"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,EAAE;IAClD,OAAO,KAAK;SACT,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;AAC5B,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@test2doc/playwright",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "A reporter that generates docs based off playwright test files",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"docs",
|
|
@@ -27,6 +27,11 @@
|
|
|
27
27
|
"import": "./dist/DocMeta.js",
|
|
28
28
|
"require": "./dist/DocMeta.js",
|
|
29
29
|
"types": "./dist/DocMeta.d.ts"
|
|
30
|
+
},
|
|
31
|
+
"./screenshots": {
|
|
32
|
+
"import": "./dist/screenshots.js",
|
|
33
|
+
"require": "./dist/screenshots.js",
|
|
34
|
+
"types": "./dist/screenshots.d.ts"
|
|
30
35
|
}
|
|
31
36
|
},
|
|
32
37
|
"main": "dist/index.js",
|
|
@@ -35,7 +40,9 @@
|
|
|
35
40
|
"files": [
|
|
36
41
|
"dist",
|
|
37
42
|
"dist/DocMeta.js",
|
|
38
|
-
"dist/DocMeta.d.ts"
|
|
43
|
+
"dist/DocMeta.d.ts",
|
|
44
|
+
"dist/screenshots.js",
|
|
45
|
+
"dist/screenshots.d.ts"
|
|
39
46
|
],
|
|
40
47
|
"publishConfig": {
|
|
41
48
|
"access": "public"
|