From abf4219c5f62e167ca41430448964d74f9e11991 Mon Sep 17 00:00:00 2001 From: Wil Wilsman Date: Tue, 12 Jul 2022 12:15:52 -0500 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20In=20testing=20mode,=20clear=20logs?= =?UTF-8?q?=20on=20reset=20(#989)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit During testing mode, full logs are rarely useful, but individual snapshot logs are more important to test against. Clearing logs on reset will allow SDK tests to read only recent and relevant logs without having to filter them. --- packages/core/src/api.js | 3 ++- packages/core/test/api.test.js | 34 ++++++++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/packages/core/src/api.js b/packages/core/src/api.js index f55d272c8..8fda5a1ef 100644 --- a/packages/core/src/api.js +++ b/packages/core/src/api.js @@ -102,8 +102,9 @@ export function createPercyServer(percy, port) { body = Buffer.isBuffer(body) ? body.toString() : body; if (cmd === 'reset') { - // the reset command will reset testing mode to its default options + // the reset command will reset testing mode and clear any logs percy.testing = {}; + logger.instance.messages.clear(); } else if (cmd === 'version') { // the version command will update the api version header for testing percy.testing.version = body; diff --git a/packages/core/test/api.test.js b/packages/core/test/api.test.js index 3e72e887a..2073ac5ee 100644 --- a/packages/core/test/api.test.js +++ b/packages/core/test/api.test.js @@ -257,6 +257,19 @@ describe('API Server', () => { expect(percy.dryRun).toBeTrue(); }); + it('enables a /test/snapshot endpoint that serves a simple html document', async () => { + await expectAsync(get('/test/snapshot')).toBeResolvedTo('

Snapshot Me!

'); + }); + + it('enables a /test/logs endpoint to return raw logs', async () => { + percy.log.info('foo bar from test'); + let { logs } = await get('/test/logs'); + + expect(logs).toEqual(jasmine.arrayContaining([ + jasmine.objectContaining({ message: 'foo bar from test' }) + ])); + }); + it('enables several /test/api endpoint commands', async () => { expect(percy.testing).toEqual({}); await post('/test/api/version', false); @@ -300,17 +313,22 @@ describe('API Server', () => { await expectAsync(req('/percy/healthcheck')).toBeRejected(); }); - it('enables a /test/logs endpoint to return raw logs', async () => { + it('can reset testing mode and clear logs via /test/reset', async () => { + // already tested up above + await post('/test/api/version', false); + await post('/test/api/disconnect', '/percy/healthcheck'); percy.log.info('foo bar from test'); - let { logs } = await get('/test/logs'); - expect(logs).toEqual(jasmine.arrayContaining([ - jasmine.objectContaining({ message: 'foo bar from test' }) - ])); - }); + // the actual endpoint to test + await post('/test/api/reset'); - it('enables a /test/snapshot endpoint that serves a simple html document', async () => { - await expectAsync(get('/test/snapshot')).toBeResolvedTo('

Snapshot Me!

'); + // everything should work as usual + let { headers } = await req('/percy/healthcheck'); + expect(headers['x-percy-core-version']).toBeDefined(); + + // logs should be empty after reset + let { logs } = await get('/test/logs'); + expect(logs).toEqual([]); }); }); });