test(e2e): give the job specs their own state back
Both specs stage a job through `/__test/emit` and neither cleared it. Nothing resets those stores, so the spec that staged it is the one that should put it back, and `JobsChanged` with `[]` is the whole cleanup -- `JobStore` replaces its list from every snapshot, so `testctl` needs no special case. **The leak as reported did not reproduce, and that is worth recording rather than quietly fixing.** Measured with a temporary probe: a positive control confirmed a staged job really does move the shell at a phone width (`job-band` renders a row, `.main-panel`'s top goes 0 to 55), and the very next page had no job at all. The reason is that every test gets a fresh page and `JobStore.init()` refetches `GetJobs()` from a backend registry `/__test/emit` never writes to -- it calls `events.Deliver`, which touches frontends and no state. So the state cannot cross a spec boundary as described, and the 55px offset the draft assertion saw in that suite run has another cause that is not in evidence. The cleanup stays, because it costs a line and the leak would need only one spec that keeps a page alive, and the comments say what was measured rather than asserting the mechanism. The durable half is the rule, now in the harness reference: measure against the element next to you, not an absolute coordinate. An absolute number in a shell measurement is also a claim about everything above it -- `contentTop === 0` asserts "and no background job is running", which that spec could not arrange. Closes #168
This commit is contained in:
1 parent
e67462ab53
commit
62c1a95ead
3 files changed
+48
No files matched your search
@@ -60,6 +60,23 @@ const PHONE = { width: 424, height: 439 };
|
||||
const DESKTOP = { width: 1100, height: 800 };
|
||||
|
||||
test.describe('background jobs on a phone', () => {
|
||||
/**
|
||||
* **State a spec stages is the spec's to clear.** `/__test/emit` writes
|
||||
* to a store nothing resets, so the event that staged a job is the
|
||||
* event that clears it — `JobStore` replaces its whole list from every
|
||||
* snapshot, so `testctl` needs no special case.
|
||||
*
|
||||
* **Measured on #168: this does not currently outlive the page.** Every
|
||||
* test gets a fresh page, and `JobStore.init()` refetches `GetJobs()`
|
||||
* from a backend registry that `/__test/emit` never writes to, so the
|
||||
* staged job is gone before the next spec starts. Ownership is stated
|
||||
* rather than a live leak repaired — the leak needs a page that
|
||||
* survives its own spec, and there is none today.
|
||||
*/
|
||||
test.afterEach(async ({ testctl }) => {
|
||||
await testctl.emit('JobsChanged', []);
|
||||
});
|
||||
|
||||
test('are shown in the band, without opening anything', async ({
|
||||
app,
|
||||
testctl,
|
||||
|
||||
Reference in new issue
Block a user