@noego/wood 0.4.0 → 0.4.2
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 +100 -2
- package/dist/client/global_polyfill.d.cts +1 -2
- package/dist/client/global_polyfill.d.ts +1 -2
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.d.cts +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/index.cjs +0 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/dist/main/index.cjs +16 -2
- package/dist/main/index.cjs.map +1 -1
- package/dist/main/index.js +16 -2
- package/dist/main/index.js.map +1 -1
- package/dist/runtime/runtime.cjs +4 -4
- package/dist/runtime/runtime.cjs.map +1 -1
- package/dist/runtime/runtime.d.cts +2 -1
- package/dist/runtime/runtime.d.ts +2 -1
- package/dist/runtime/runtime.js +8 -5
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/testing/browser.cjs +224 -32
- package/dist/testing/browser.cjs.map +1 -1
- package/dist/testing/browser.d.cts +18 -1
- package/dist/testing/browser.d.ts +18 -1
- package/dist/testing/browser.js +226 -32
- package/dist/testing/browser.js.map +1 -1
- package/dist/testing/create_controller_harness.cjs +3 -1
- package/dist/testing/create_controller_harness.cjs.map +1 -1
- package/dist/testing/create_controller_harness.d.cts +4 -2
- package/dist/testing/create_controller_harness.d.ts +4 -2
- package/dist/testing/create_controller_harness.js +3 -1
- package/dist/testing/create_controller_harness.js.map +1 -1
- package/dist/testing/index.cjs +3 -3
- package/dist/testing/index.cjs.map +1 -1
- package/dist/testing/index.d.cts +6 -4
- package/dist/testing/index.d.ts +6 -4
- package/dist/testing/index.js +2 -2
- package/dist/testing/index.js.map +1 -1
- package/dist/trace-testing/index.cjs +39 -0
- package/dist/trace-testing/index.cjs.map +1 -0
- package/dist/trace-testing/index.d.cts +6 -0
- package/dist/trace-testing/index.d.ts +6 -0
- package/dist/trace-testing/index.js +19 -0
- package/dist/trace-testing/index.js.map +1 -0
- package/dist/trace-testing/trace_assertions.cjs +29 -0
- package/dist/trace-testing/trace_assertions.cjs.map +1 -0
- package/dist/trace-testing/trace_assertions.d.cts +1 -0
- package/dist/trace-testing/trace_assertions.d.ts +1 -0
- package/dist/trace-testing/trace_assertions.js +7 -0
- package/dist/trace-testing/trace_assertions.js.map +1 -0
- package/dist/trace-testing/trace_query.cjs +33 -0
- package/dist/trace-testing/trace_query.cjs.map +1 -0
- package/dist/trace-testing/trace_query.d.cts +1 -0
- package/dist/trace-testing/trace_query.d.ts +1 -0
- package/dist/trace-testing/trace_query.js +11 -0
- package/dist/trace-testing/trace_query.js.map +1 -0
- package/dist/trace-testing/trace_recorder.cjs +50 -0
- package/dist/trace-testing/trace_recorder.cjs.map +1 -0
- package/dist/trace-testing/trace_recorder.d.cts +12 -0
- package/dist/trace-testing/trace_recorder.d.ts +12 -0
- package/dist/trace-testing/trace_recorder.js +32 -0
- package/dist/trace-testing/trace_recorder.js.map +1 -0
- package/dist/tracing/index.cjs +0 -4
- package/dist/tracing/index.cjs.map +1 -1
- package/dist/tracing/index.d.cts +1 -1
- package/dist/tracing/index.d.ts +1 -1
- package/dist/tracing/index.js +1 -5
- package/dist/tracing/index.js.map +1 -1
- package/dist/tracing/trace_hub.cjs +19 -86
- package/dist/tracing/trace_hub.cjs.map +1 -1
- package/dist/tracing/trace_hub.d.cts +11 -16
- package/dist/tracing/trace_hub.d.ts +11 -16
- package/dist/tracing/trace_hub.js +19 -74
- package/dist/tracing/trace_hub.js.map +1 -1
- package/dist/tracing/trace_provider.cjs +0 -6
- package/dist/tracing/trace_provider.cjs.map +1 -1
- package/dist/tracing/trace_provider.d.cts +1 -3
- package/dist/tracing/trace_provider.d.ts +1 -3
- package/dist/tracing/trace_provider.js +0 -7
- package/dist/tracing/trace_provider.js.map +1 -1
- package/docs/browser-testing.md +84 -0
- package/package.json +8 -1
package/docs/browser-testing.md
CHANGED
|
@@ -162,6 +162,90 @@ bridge, for example `settings.get` or `messages.send`. Static values are
|
|
|
162
162
|
returned directly. Functions receive the operation input and a small context
|
|
163
163
|
with the channel and recorded calls.
|
|
164
164
|
|
|
165
|
+
## Tracing Browser Scenarios
|
|
166
|
+
|
|
167
|
+
Use browser-harness tracing when the behavior under test is a renderer pipeline:
|
|
168
|
+
route/controller selection, repeated work, resize or animation timing,
|
|
169
|
+
stream/reconcile order, bridge calls, or any case where the final DOM is not
|
|
170
|
+
enough to prove what happened.
|
|
171
|
+
|
|
172
|
+
Enable tracing on the harness with `trace.enabled`. The harness creates a
|
|
173
|
+
`TraceRecorder`, installs the renderer trace bridge, and exposes the recorder as
|
|
174
|
+
`harness.traceRecorder`.
|
|
175
|
+
|
|
176
|
+
```ts
|
|
177
|
+
import { browser } from '@noego/wood/testing';
|
|
178
|
+
|
|
179
|
+
const harness = await browser.createHarness({
|
|
180
|
+
rootDir: process.cwd(),
|
|
181
|
+
componentDir: 'ui',
|
|
182
|
+
css: ['ui/app.css'],
|
|
183
|
+
trace: {
|
|
184
|
+
enabled: true,
|
|
185
|
+
harnessId: 'settings-panel-test',
|
|
186
|
+
windowId: 'settings-window',
|
|
187
|
+
maxEvents: 500,
|
|
188
|
+
},
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
try {
|
|
192
|
+
const mounted = await harness.mountComponent('ui/SettingsPanel.svelte');
|
|
193
|
+
|
|
194
|
+
await mounted.page.evaluate(() => {
|
|
195
|
+
window.wood.__trace({
|
|
196
|
+
source: 'settings.panel',
|
|
197
|
+
type: 'settings.panel.rendered',
|
|
198
|
+
payload: { tab: 'appearance' },
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
await expect(harness.traceRecorder?.waitForTrace({
|
|
203
|
+
type: 'settings.panel.rendered',
|
|
204
|
+
harnessId: 'settings-panel-test',
|
|
205
|
+
})).resolves.toMatchObject({
|
|
206
|
+
process: 'renderer',
|
|
207
|
+
payload: { tab: 'appearance' },
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
const trace = harness.traceRecorder?.query();
|
|
211
|
+
trace?.expectOnce({ type: 'settings.panel.rendered' });
|
|
212
|
+
} finally {
|
|
213
|
+
await harness.destroy();
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Renderer trace events are forwarded through the Wood bridge into the same trace
|
|
218
|
+
stream used by main-process and test-process events. The resulting events keep
|
|
219
|
+
their `process` field, so tests can assert whether an event came from
|
|
220
|
+
`renderer`, `main`, or `test`.
|
|
221
|
+
|
|
222
|
+
Useful options:
|
|
223
|
+
|
|
224
|
+
- `enabled`: turns on renderer forwarding and creates `harness.traceRecorder`.
|
|
225
|
+
- `harnessId`: tags events from this test so assertions can filter them.
|
|
226
|
+
- `windowId`: tags events with a stable window identity.
|
|
227
|
+
- `maxEvents`: caps the in-memory recorder buffer.
|
|
228
|
+
- `minLevel`: filters lower-level trace events before they reach the recorder.
|
|
229
|
+
|
|
230
|
+
Use `harness.traceRecorder?.query()` for counts, ordered sequences, payload
|
|
231
|
+
checks, and negative assertions:
|
|
232
|
+
|
|
233
|
+
```ts
|
|
234
|
+
const trace = harness.traceRecorder?.query();
|
|
235
|
+
|
|
236
|
+
trace?.expectSequence([
|
|
237
|
+
{ type: 'transcript.projection.started' },
|
|
238
|
+
{ type: 'transcript.projection.completed', 'payload.changedRows': 2 },
|
|
239
|
+
]);
|
|
240
|
+
trace?.expectNone({ type: 'transcript.projection.failed' });
|
|
241
|
+
expect(trace?.count({ type: 'transcript.scroll-plan' })).toBeLessThanOrEqual(1);
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
For Node-only controller tests, use the controller harness' `traceRecorder` or
|
|
245
|
+
resolve `TraceRecorder` from the test container, call `enable()`, run the
|
|
246
|
+
subject, then assert against `traceRecorder.query()`. For browser harness tests,
|
|
247
|
+
prefer the `trace` harness config because it also wires renderer forwarding.
|
|
248
|
+
|
|
165
249
|
## Assertions
|
|
166
250
|
|
|
167
251
|
Every mounted surface exposes Playwright's `page` and `locator`, plus
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noego/wood",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -43,6 +43,12 @@
|
|
|
43
43
|
"import": "./dist/testing/index.js",
|
|
44
44
|
"default": "./dist/testing/index.js"
|
|
45
45
|
},
|
|
46
|
+
"./trace-testing": {
|
|
47
|
+
"types": "./dist/trace-testing/index.d.ts",
|
|
48
|
+
"require": "./dist/trace-testing/index.cjs",
|
|
49
|
+
"import": "./dist/trace-testing/index.js",
|
|
50
|
+
"default": "./dist/trace-testing/index.js"
|
|
51
|
+
},
|
|
46
52
|
"./client": {
|
|
47
53
|
"types": "./dist/client/index.d.ts",
|
|
48
54
|
"require": "./dist/client/index.cjs",
|
|
@@ -96,6 +102,7 @@
|
|
|
96
102
|
"@noego/ioc": "^0.3.1",
|
|
97
103
|
"@noego/logger": "^0.0.2",
|
|
98
104
|
"@noego/stitch": "^1.0.3",
|
|
105
|
+
"@noego/trace": "^0.0.2",
|
|
99
106
|
"ajv": "^8.x",
|
|
100
107
|
"ajv-formats": "^3.x",
|
|
101
108
|
"chokidar": "^4.x",
|