@vijaypjavvadi/bdd2pw 3.2.0 → 3.3.0
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/CHANGELOG.md +72 -0
- package/dist/emitters/facade.js +47 -11
- package/dist/emitters/facade.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,78 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
_Nothing yet._
|
|
11
11
|
|
|
12
|
+
## [3.3.0] — 2026-05-22
|
|
13
|
+
|
|
14
|
+
### Changed — TestForge step-hook signature extension (follow-up to v3.1.0 Issue 4)
|
|
15
|
+
|
|
16
|
+
TestForge follow-up request: the v3.1.0 step hook only received
|
|
17
|
+
`(testInfo, title)` — enough for metadata-only consumers, but not
|
|
18
|
+
for the most common use case (per-step screenshots, DOM capture,
|
|
19
|
+
artefact attachment). All of those need access to `page` (or
|
|
20
|
+
`request` / `context` / `browser`).
|
|
21
|
+
|
|
22
|
+
When `stepHooks: true`, the emitted `test.step(...)` wrapper now
|
|
23
|
+
looks like this:
|
|
24
|
+
|
|
25
|
+
await test.step("Given …", async () => {
|
|
26
|
+
await (globalThis as any).__bdd2pwHooks?.beforeStep?.(
|
|
27
|
+
testInfo,
|
|
28
|
+
"Given …",
|
|
29
|
+
{ page },
|
|
30
|
+
);
|
|
31
|
+
let _bdd2pwStatus: "passed" | "failed" = "passed";
|
|
32
|
+
try {
|
|
33
|
+
// step body
|
|
34
|
+
} catch (_bdd2pwErr) {
|
|
35
|
+
_bdd2pwStatus = "failed";
|
|
36
|
+
throw _bdd2pwErr;
|
|
37
|
+
} finally {
|
|
38
|
+
await (globalThis as any).__bdd2pwHooks?.afterStep?.(
|
|
39
|
+
testInfo,
|
|
40
|
+
"Given …",
|
|
41
|
+
_bdd2pwStatus,
|
|
42
|
+
{ page },
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
Three changes from v3.1.0:
|
|
48
|
+
|
|
49
|
+
1. **`fixtures` arg.** Both `beforeStep` and `afterStep` now receive
|
|
50
|
+
a `{ page, request?, context?, browser? }` object containing
|
|
51
|
+
whatever fixtures the surrounding `test()` callback
|
|
52
|
+
destructures. Currently always `{ page }` — when bdd2pw starts
|
|
53
|
+
threading multi-fixture signatures through `EmitTestFileInput`,
|
|
54
|
+
the same literal forwards automatically.
|
|
55
|
+
|
|
56
|
+
2. **`status` arg on `afterStep`.** Reports `"passed"` or
|
|
57
|
+
`"failed"` so consumers can attach failure-only artefacts
|
|
58
|
+
(per-step screenshot only when the step failed, full DOM dump
|
|
59
|
+
only on failure, etc.).
|
|
60
|
+
|
|
61
|
+
3. **try/catch/finally wrapping.** `afterStep` fires on the
|
|
62
|
+
failure path too — `_bdd2pwStatus` is set to `"failed"`, the
|
|
63
|
+
error is re-thrown, and `finally` runs the hook. Local
|
|
64
|
+
variable, no cross-step shadowing.
|
|
65
|
+
|
|
66
|
+
### Backward compatibility
|
|
67
|
+
|
|
68
|
+
Consumers whose hook signature is `(testInfo, title)` /
|
|
69
|
+
`(testInfo, title, status)` continue to work — JavaScript silently
|
|
70
|
+
drops the extra positional args. Optional chaining throughout
|
|
71
|
+
means consumers who don't set `__bdd2pwHooks` see no behaviour
|
|
72
|
+
change at all.
|
|
73
|
+
|
|
74
|
+
### Tests
|
|
75
|
+
|
|
76
|
+
`tests/unit/v310Fixtures.test.ts` — updated the existing
|
|
77
|
+
"stepHooks: true emits …" assertion to also verify the v3.3.0
|
|
78
|
+
shape: fixtures arg on both hooks, status arg on afterStep,
|
|
79
|
+
try/catch/finally wrapping with `_bdd2pwStatus`. Same fixture file
|
|
80
|
+
(`tests/fixtures/v3.1.0/04-step-hooks/input.feature`) — no new
|
|
81
|
+
fixture needed; the contract change is in the rendered output, not
|
|
82
|
+
the input.
|
|
83
|
+
|
|
12
84
|
## [3.2.0] — 2026-05-22
|
|
13
85
|
|
|
14
86
|
### Added — TestForge handoff P2 backlog (Issues 6-10)
|
package/dist/emitters/facade.js
CHANGED
|
@@ -110,9 +110,15 @@ function emitTestFile(input) {
|
|
|
110
110
|
hasApi: s.bindings.some((b) => b.apiContext === true),
|
|
111
111
|
}));
|
|
112
112
|
const featureHasApi = scenariosWithApiFlag.some((s) => s.hasApi);
|
|
113
|
+
// v3.3.0 — fixtures destructured by the emitted `test(...)` callback.
|
|
114
|
+
// Forwarded into the step hooks so consumers can take per-step
|
|
115
|
+
// screenshots / save DOM / etc. without re-resolving fixtures.
|
|
116
|
+
// Defaults to `["page"]` — matches pw-emit's testEmitter default.
|
|
117
|
+
const defaultFixtures = ["page"];
|
|
113
118
|
const stepOpts = {
|
|
114
119
|
stepHooks: input.stepHooks === true,
|
|
115
120
|
stepMarkers: input.stepMarkers === true,
|
|
121
|
+
fixtures: defaultFixtures,
|
|
116
122
|
};
|
|
117
123
|
const ir = {
|
|
118
124
|
describeName: input.describeName,
|
|
@@ -178,6 +184,8 @@ function emitTestFile(input) {
|
|
|
178
184
|
* Gherkin scenario.
|
|
179
185
|
*/
|
|
180
186
|
function bindingsToBody(bindings, prelude = [], options = {}) {
|
|
187
|
+
const fixtureNames = options.fixtures && options.fixtures.length > 0 ? options.fixtures : ["page"];
|
|
188
|
+
const fixturesLit = `{ ${fixtureNames.join(", ")} }`;
|
|
181
189
|
const lines = [];
|
|
182
190
|
if (prelude.length > 0) {
|
|
183
191
|
lines.push(...prelude);
|
|
@@ -203,26 +211,24 @@ function bindingsToBody(bindings, prelude = [], options = {}) {
|
|
|
203
211
|
lines.push(`// bdd2pw:step-open id="${stepId}" title=${JSON.stringify(stepLabel)}`);
|
|
204
212
|
}
|
|
205
213
|
lines.push(`await test.step(${labelLit}, async () => {`);
|
|
206
|
-
//
|
|
207
|
-
//
|
|
208
|
-
//
|
|
209
|
-
|
|
210
|
-
lines.push(` await (globalThis as any).__bdd2pwHooks?.beforeStep?.(testInfo, ${labelLit});`);
|
|
211
|
-
}
|
|
214
|
+
// Collect the step body into a buffer. When stepHooks is on, the
|
|
215
|
+
// buffer is wrapped in try/catch/finally below; otherwise it's
|
|
216
|
+
// emitted directly inside the test.step arrow.
|
|
217
|
+
const bodyLines = [];
|
|
212
218
|
if (b.customBody) {
|
|
213
219
|
// Compound step — body has multiple statements pre-rendered.
|
|
214
220
|
// v2.2.5 — sanitize digit-leading POM references that may have been
|
|
215
221
|
// cached from older bdd2pw versions.
|
|
216
222
|
const safeBody = sanitizeLocatorReferences(b.customBody);
|
|
217
223
|
for (const line of safeBody.split("\n"))
|
|
218
|
-
|
|
224
|
+
bodyLines.push(line);
|
|
219
225
|
}
|
|
220
226
|
else if (b.pomCall) {
|
|
221
227
|
const args = b.pomCall.args
|
|
222
228
|
.map((a) => sanitizeLocatorReferences(a))
|
|
223
229
|
.join(", ");
|
|
224
230
|
const method = sanitizeLocatorReferences(b.pomCall.method);
|
|
225
|
-
|
|
231
|
+
bodyLines.push(`await ${b.pomCall.page}.${method}(${args});`);
|
|
226
232
|
}
|
|
227
233
|
else if (b.assertion) {
|
|
228
234
|
const expected = b.assertion.expected !== undefined ? b.assertion.expected : "";
|
|
@@ -237,7 +243,7 @@ function bindingsToBody(bindings, prelude = [], options = {}) {
|
|
|
237
243
|
// v2.2.5 — rewrite `.0Of0` → `._0Of0` for cached bindings.
|
|
238
244
|
const safeLocator = sanitizeLocatorReferences(trimmedLocator);
|
|
239
245
|
const renderedLocator = safeLocator === "" ? "page" : safeLocator;
|
|
240
|
-
|
|
246
|
+
bodyLines.push(`await expect(${renderedLocator}).${b.assertion.matcher}(${expected});`);
|
|
241
247
|
}
|
|
242
248
|
else {
|
|
243
249
|
// v2.0.1 — defensively flatten the warning so any newlines in error
|
|
@@ -245,10 +251,40 @@ function bindingsToBody(bindings, prelude = [], options = {}) {
|
|
|
245
251
|
// native module load failures) don't bleed past the `//` and break
|
|
246
252
|
// the .spec.ts parse.
|
|
247
253
|
const safeWarning = (0, commentSafe_1.flattenForComment)(b.warning ?? "no rule matched this step");
|
|
248
|
-
|
|
254
|
+
bodyLines.push(`// TODO: ${safeWarning}`);
|
|
249
255
|
}
|
|
256
|
+
// v3.1.0 + v3.3.0 — opt-in step hook callouts. v3.3.0 extends the
|
|
257
|
+
// signature with two new positional args:
|
|
258
|
+
// - `status: "passed" | "failed"` on afterStep (so consumers can
|
|
259
|
+
// attach failure-only artefacts).
|
|
260
|
+
// - `fixtures: { page, request?, context?, browser? }` on both
|
|
261
|
+
// (so consumers can take per-step screenshots, save DOM
|
|
262
|
+
// snapshots, etc. without re-resolving fixtures).
|
|
263
|
+
//
|
|
264
|
+
// The body is wrapped in try/catch/finally so afterStep fires on
|
|
265
|
+
// the failure path too. `_bdd2pwStatus` is local to this arrow —
|
|
266
|
+
// no cross-step shadowing.
|
|
267
|
+
//
|
|
268
|
+
// Optional chaining throughout means consumers who don't set
|
|
269
|
+
// `(globalThis as any).__bdd2pwHooks = {...}` see zero behaviour
|
|
270
|
+
// change. Existing v3.1/3.2 hooks that ignore the new positional
|
|
271
|
+
// args continue to work — JS silently drops the extras.
|
|
250
272
|
if (options.stepHooks) {
|
|
251
|
-
lines.push(` await (globalThis as any).__bdd2pwHooks?.
|
|
273
|
+
lines.push(` await (globalThis as any).__bdd2pwHooks?.beforeStep?.(testInfo, ${labelLit}, ${fixturesLit});`);
|
|
274
|
+
lines.push(` let _bdd2pwStatus: "passed" | "failed" = "passed";`);
|
|
275
|
+
lines.push(` try {`);
|
|
276
|
+
for (const bl of bodyLines)
|
|
277
|
+
lines.push(` ${bl}`);
|
|
278
|
+
lines.push(` } catch (_bdd2pwErr) {`);
|
|
279
|
+
lines.push(` _bdd2pwStatus = "failed";`);
|
|
280
|
+
lines.push(` throw _bdd2pwErr;`);
|
|
281
|
+
lines.push(` } finally {`);
|
|
282
|
+
lines.push(` await (globalThis as any).__bdd2pwHooks?.afterStep?.(testInfo, ${labelLit}, _bdd2pwStatus, ${fixturesLit});`);
|
|
283
|
+
lines.push(` }`);
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
for (const bl of bodyLines)
|
|
287
|
+
lines.push(` ${bl}`);
|
|
252
288
|
}
|
|
253
289
|
lines.push(`});`);
|
|
254
290
|
if (options.stepMarkers) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facade.js","sourceRoot":"","sources":["../../src/emitters/facade.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAsCH,8DAYC;AA6ED,wCAQC;AAeD,
|
|
1
|
+
{"version":3,"file":"facade.js","sourceRoot":"","sources":["../../src/emitters/facade.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vijaypjavvadi/bdd2pw",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "Scaffold runnable Playwright TypeScript tests from Gherkin .feature files. Detects existing Page Objects, scans live pages via Microsoft Playwright MCP, emits POMs + specs, ready for execution. CLI + HTTP service. Optional governed LLM fallback (Anthropic / OpenAI / Gemini).",
|
|
5
5
|
"bin": {
|
|
6
6
|
"bdd2pw": "dist/cli.js"
|