From b308c0d872eb0412a5fc7e999203e97cddac6267 Mon Sep 17 00:00:00 2001 From: Wil Wilsman Date: Mon, 9 Nov 2020 11:48:30 -0600 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=90=9B=20Start=20server=20after=20lau?= =?UTF-8?q?nching=20a=20browser=20and=20creating=20a=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/percy.js | 10 +++++----- packages/core/test/percy.test.js | 20 ++++++++++++++++++-- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/packages/core/src/percy.js b/packages/core/src/percy.js index aa8b2df5d..fc2611e62 100644 --- a/packages/core/src/percy.js +++ b/packages/core/src/percy.js @@ -90,13 +90,13 @@ export default class Percy { this.client.getToken(); try { - // if there is a server, start listening - await this.server?.listen(this.port); - // launch the discoverer browser and create a percy build await this.discoverer.launch(); await this.client.createBuild(); + // if there is a server, start listening + await this.server?.listen(this.port); + // log build details let build = this.client.build; let meta = { build: { id: build.id } }; @@ -106,9 +106,9 @@ export default class Percy { // mark this process as running this.#running = true; } catch (error) { - // on error, close any running browser or server - await this.discoverer.close(); + // on error, close any running server or browser await this.server?.close(); + await this.discoverer.close(); // throw an easier-to understand error when the port is taken if (error.code === 'EADDRINUSE') { diff --git a/packages/core/test/percy.test.js b/packages/core/test/percy.test.js index b2aa10d62..f7ea0c7b7 100644 --- a/packages/core/test/percy.test.js +++ b/packages/core/test/percy.test.js @@ -105,6 +105,11 @@ describe('Percy', () => { }); describe('#start()', () => { + it('launches a browser', async () => { + await expect(percy.start()).resolves.toBeUndefined(); + expect(percy.discoverer.isConnected()).toBe(true); + }); + it('creates a build', async () => { await expect(percy.start()).resolves.toBeUndefined(); expect(mockAPI.requests['/builds']).toBeDefined(); @@ -115,9 +120,20 @@ describe('Percy', () => { await expect(fetch('http://localhost:5338')).resolves.toBeDefined(); }); - it('connects to a browser instance', async () => { + it('starts a server after launching a browser and creating a build', async () => { + let launch = percy.discoverer.launch.bind(percy.discoverer); + let create = percy.client.createBuild.bind(percy.client); + let start = percy.server.listen.bind(percy.server); + let launched, created, started; + + percy.discoverer.launch = () => (launched = Date.now(), launch()); + percy.client.createBuild = () => (created = Date.now(), create()); + percy.server.listen = () => (started = Date.now(), start()); + await expect(percy.start()).resolves.toBeUndefined(); - expect(percy.discoverer.isConnected()).toBe(true); + + expect(launched).toBeLessThan(created); + expect(created).toBeLessThan(started); }); it('does not error or launch multiple browsers', async () => { From 20ac962e165d2cb4bcc0ce7c158d07e109824ca7 Mon Sep 17 00:00:00 2001 From: Wil Wilsman Date: Mon, 9 Nov 2020 11:49:09 -0600 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=9A=A8=20Relax=20certain=20lint=20err?= =?UTF-8?q?ors=20in=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both returning assignments and sequences can be useful for quick tests --- packages/core/test/.eslintrc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/core/test/.eslintrc b/packages/core/test/.eslintrc index 9808c3b2b..c6df3acf6 100644 --- a/packages/core/test/.eslintrc +++ b/packages/core/test/.eslintrc @@ -1,2 +1,5 @@ env: mocha: true +rules: + no-return-assign: off + no-sequences: off