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/.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 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 () => {