Skip to content

Commit 0e56aa3

Browse files
committed
fix(browser-logs): use expectIncludes for better assertion errors
Add local expectIncludes helper (package doesn't depend on dev-server-core) to replace assert.ok(x.includes(y)) which gives useless true/false errors on failure. Assisted-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent ff6742c commit 0e56aa3

1 file changed

Lines changed: 44 additions & 36 deletions

File tree

packages/browser-logs/test/serialize-deserialize.test.ts

Lines changed: 44 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ import puppeteer from 'puppeteer';
99

1010
import { deserialize } from '../dist/deserialize.js';
1111

12+
function expectIncludes(actual: string, expected: string) {
13+
if (!actual.includes(expected)) {
14+
throw new Error(
15+
`Expected substring not found.\n\nExpected:\n${expected}\n\nActual:\n${actual}`,
16+
);
17+
}
18+
}
19+
1220
const require = createRequire(import.meta.url);
1321
const serializeScript = fs.readFileSync(require.resolve('../dist/serialize.js'), 'utf-8');
1422
const defaultOptions = { browserRootDir: import.meta.dirname, cwd: import.meta.dirname };
@@ -350,11 +358,11 @@ describe('serialize deserialize', { timeout: 10000 }, function () {
350358
});
351359
const deserialized = await deserialize(serialized, defaultOptions);
352360
assert.equal(typeof deserialized, 'string');
353-
assert.ok(deserialized.includes('my error msg'));
354-
assert.ok(deserialized.includes('2:23'));
355-
assert.ok(deserialized.includes('3:23'));
356-
assert.ok(deserialized.includes('4:23'));
357-
assert.ok(deserialized.includes('5:35'));
361+
expectIncludes(deserialized, 'my error msg');
362+
expectIncludes(deserialized, '2:23');
363+
expectIncludes(deserialized, '3:23');
364+
expectIncludes(deserialized, '4:23');
365+
expectIncludes(deserialized, '5:35');
358366
});
359367

360368
it('handles errors in objects', async () => {
@@ -366,11 +374,11 @@ describe('serialize deserialize', { timeout: 10000 }, function () {
366374
});
367375
const deserialized = await deserialize(serialized, defaultOptions);
368376
assert.equal(typeof deserialized.myError, 'string');
369-
assert.ok(deserialized.myError.includes('my error msg'));
370-
assert.ok(deserialized.myError.includes('2:23'));
371-
assert.ok(deserialized.myError.includes('3:23'));
372-
assert.ok(deserialized.myError.includes('4:23'));
373-
assert.ok(deserialized.myError.includes('5:46'));
377+
expectIncludes(deserialized.myError, 'my error msg');
378+
expectIncludes(deserialized.myError, '2:23');
379+
expectIncludes(deserialized.myError, '3:23');
380+
expectIncludes(deserialized.myError, '4:23');
381+
expectIncludes(deserialized.myError, '5:46');
374382
});
375383

376384
it('handles errors in arrays', async () => {
@@ -382,20 +390,20 @@ describe('serialize deserialize', { timeout: 10000 }, function () {
382390
});
383391
const deserialized = await deserialize(serialized, defaultOptions);
384392
assert.equal(typeof deserialized[0], 'string');
385-
assert.ok(deserialized[0].includes('my error msg'));
386-
assert.ok(deserialized[0].includes('2:23'));
387-
assert.ok(deserialized[0].includes('3:23'));
388-
assert.ok(deserialized[0].includes('4:23'));
389-
assert.ok(deserialized[0].includes('5:36'));
393+
expectIncludes(deserialized[0], 'my error msg');
394+
expectIncludes(deserialized[0], '2:23');
395+
expectIncludes(deserialized[0], '3:23');
396+
expectIncludes(deserialized[0], '4:23');
397+
expectIncludes(deserialized[0], '5:36');
390398
assert.equal(typeof deserialized[1], 'string');
391-
assert.ok(deserialized[1].includes('my error msg'));
392-
assert.ok(deserialized[1].includes('2:23'));
393-
assert.ok(deserialized[1].includes('3:23'));
394-
assert.ok(deserialized[1].includes('5:41'));
399+
expectIncludes(deserialized[1], 'my error msg');
400+
expectIncludes(deserialized[1], '2:23');
401+
expectIncludes(deserialized[1], '3:23');
402+
expectIncludes(deserialized[1], '5:41');
395403
assert.equal(typeof deserialized[2], 'string');
396-
assert.ok(deserialized[2].includes('my error msg'));
397-
assert.ok(deserialized[2].includes('2:23'));
398-
assert.ok(deserialized[2].includes('5:46'));
404+
expectIncludes(deserialized[2], 'my error msg');
405+
expectIncludes(deserialized[2], '2:23');
406+
expectIncludes(deserialized[2], '5:46');
399407
});
400408

401409
it('can map stack trace locations', async () => {
@@ -410,8 +418,8 @@ describe('serialize deserialize', { timeout: 10000 }, function () {
410418
mapStackLocation: l => ({ ...l, filePath: `${l.filePath}__MAPPED__`, line: 1, column: 2 }),
411419
});
412420
assert.equal(typeof deserialized, 'string');
413-
assert.ok(deserialized.includes('my error msg'));
414-
assert.ok(deserialized.includes(`__MAPPED__:1:2`));
421+
expectIncludes(deserialized, 'my error msg');
422+
expectIncludes(deserialized, `__MAPPED__:1:2`);
415423
});
416424

417425
it('mapped stack traces can be async', async () => {
@@ -429,8 +437,8 @@ describe('serialize deserialize', { timeout: 10000 }, function () {
429437
},
430438
});
431439
assert.equal(typeof deserialized, 'string');
432-
assert.ok(deserialized.includes('my error msg'));
433-
assert.ok(deserialized.includes(`__MAPPED__:1:2`));
440+
expectIncludes(deserialized, 'my error msg');
441+
expectIncludes(deserialized, `__MAPPED__:1:2`);
434442
});
435443

436444
it('can define a cwd below current directory', async () => {
@@ -445,11 +453,11 @@ describe('serialize deserialize', { timeout: 10000 }, function () {
445453
cwd: path.resolve(import.meta.dirname, '..'),
446454
});
447455
assert.equal(typeof deserialized, 'string');
448-
assert.ok(deserialized.includes('my error msg'));
449-
assert.ok(deserialized.includes(`2:23`));
450-
assert.ok(deserialized.includes(`3:23`));
451-
assert.ok(deserialized.includes(`4:23`));
452-
assert.ok(deserialized.includes(`5:35`));
456+
expectIncludes(deserialized, 'my error msg');
457+
expectIncludes(deserialized, `2:23`);
458+
expectIncludes(deserialized, `3:23`);
459+
expectIncludes(deserialized, `4:23`);
460+
expectIncludes(deserialized, `5:35`);
453461
});
454462

455463
it('can define a cwd above current directory', async () => {
@@ -464,11 +472,11 @@ describe('serialize deserialize', { timeout: 10000 }, function () {
464472
browserRootDir: path.resolve(import.meta.dirname, '..'),
465473
});
466474
assert.equal(typeof deserialized, 'string');
467-
assert.ok(deserialized.includes('my error msg'));
468-
assert.ok(deserialized.includes(`2:23`));
469-
assert.ok(deserialized.includes(`3:23`));
470-
assert.ok(deserialized.includes(`4:23`));
471-
assert.ok(deserialized.includes(`5:35`));
475+
expectIncludes(deserialized, 'my error msg');
476+
expectIncludes(deserialized, `2:23`);
477+
expectIncludes(deserialized, `3:23`);
478+
expectIncludes(deserialized, `4:23`);
479+
expectIncludes(deserialized, `5:35`);
472480
});
473481

474482
it('handles null', async () => {

0 commit comments

Comments
 (0)