diff options
| author | Andrej Mihajlov <and@mullvad.net> | 2018-07-12 12:49:27 +0200 |
|---|---|---|
| committer | Andrej Mihajlov <and@mullvad.net> | 2018-07-16 20:34:15 +0200 |
| commit | 377e730349d9ad864a109c771e8260b9e7273038 (patch) | |
| tree | ad4a8cb7298fed9caae69e7648361da53db10ab8 | |
| parent | 9cde5c51adb96d16e20580a73f59ac8e4ffdf23d (diff) | |
| download | mullvadvpn-377e730349d9ad864a109c771e8260b9e7273038.tar.xz mullvadvpn-377e730349d9ad864a109c771e8260b9e7273038.zip | |
Add chai-as-promised to improve promise based tests
| -rw-r--r-- | package.json | 1 | ||||
| -rw-r--r-- | test/jsonrpc-transport.spec.js | 97 | ||||
| -rw-r--r-- | test/setup/renderer.js | 2 | ||||
| -rw-r--r-- | yarn.lock | 8 |
4 files changed, 44 insertions, 64 deletions
diff --git a/package.json b/package.json index 90904be1da..872664536a 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "license": "GPL-3.0", "dependencies": { "babel-runtime": "^6.22.0", + "chai-as-promised": "^7.1.1", "d3-geo-projection": "^2.3.2", "electron-log": "^2.2.8", "eslint-plugin-promise": "^3.8.0", diff --git a/test/jsonrpc-transport.spec.js b/test/jsonrpc-transport.spec.js index 124bba8f00..1f36be83a6 100644 --- a/test/jsonrpc-transport.spec.js +++ b/test/jsonrpc-transport.spec.js @@ -19,7 +19,7 @@ describe('JSON RPC transport', () => { server.close(); }); - it('should send as soon as the websocket connects', (done) => { + it('should send as soon as the websocket connects', () => { server.on('message', (msg) => { const { payload } = jsonrpc.parse(msg); @@ -28,19 +28,14 @@ describe('JSON RPC transport', () => { } }); - transport - .send('hello') - .then(() => { - done(); - }) - .catch((error) => { - done(error); - }); + const sendPromise = transport.send('hello'); transport.connect(WEBSOCKET_URL); + + return expect(sendPromise).to.eventually.be.fulfilled; }); - it('should reject failed jsonrpc requests', (done) => { + it('should reject failed jsonrpc requests', () => { server.on('message', (msg) => { const { payload } = jsonrpc.parse(msg); @@ -53,17 +48,11 @@ describe('JSON RPC transport', () => { } }); - transport.send('invalid-method').catch((error) => { - try { - expect(error.code).to.equal(-32601); - expect(error.message).to.contain('Method not found'); - done(); - } catch (error) { - done(error); - } - }); + const sendPromise = transport.send('invalid-method'); transport.connect(WEBSOCKET_URL); + + return expect(sendPromise).to.eventually.be.rejectedWith('Method not found'); }); it('should route reply to correct promise', () => { @@ -75,44 +64,29 @@ describe('JSON RPC transport', () => { } }); - const decoy = transport - .send('a decoy', [], 100) - .then(() => { - throw new Error('Should not be called'); - }) - .catch((error) => { - expect(error).to.be.an.instanceof(JsonRpcTransportTimeOutError); - }); - - const message = transport.send('a message', [], 100).then((reply) => { - expect(reply).to.equal('a reply'); - }); + const decoyPromise = transport.send('a decoy', [], 100); + const messagePromise = transport.send('a message', [], 100); transport.connect(WEBSOCKET_URL); - return Promise.all([message, decoy]); + return Promise.all([ + expect(messagePromise).to.eventually.be.equal('a reply'), + expect(decoyPromise).to.eventually.be.rejectedWith(JsonRpcTransportTimeOutError), + ]); }); - it('should timeout if no response is returned', (done) => { - transport - .send('timeout-message', {}, 1) - .then(() => { - done(new Error('Should not be called')); - }) - .catch((error) => { - try { - expect(error).to.be.an.instanceof(JsonRpcTransportTimeOutError); - expect(error.message).to.contain('Request timed out'); - done(); - } catch (error) { - done(error); - } - }); + it('should timeout if no response is returned', () => { + const sendPromise = transport.send('timeout-message', {}, 1); transport.connect(WEBSOCKET_URL); + + return expect(sendPromise).to.eventually.be.rejectedWith( + JsonRpcTransportTimeOutError, + 'Request timed out', + ); }); - it('should route notifications', (done) => { + it('should route notifications', () => { server.on('message', (msg) => { const { payload } = jsonrpc.parse(msg); @@ -121,24 +95,21 @@ describe('JSON RPC transport', () => { } }); - transport - .subscribe('event', (event) => { - try { - expect(event).to.equal('an event!'); - done(); - } catch (error) { - done(error); - } - }) - .then(() => { + transport.connect(WEBSOCKET_URL); + + let subscribePromise; + const eventPromise = new Promise((resolve) => { + subscribePromise = transport.subscribe('event', resolve).then((value) => { server.send( - JSON.stringify(jsonrpc.notification('event', { subscription: 1, result: 'an event!' })), + JSON.stringify(jsonrpc.notification('event', { subscription: 1, result: 'beacon' })), ); - }) - .catch((error) => { - done(error); + return value; }); + }); - transport.connect(WEBSOCKET_URL); + return Promise.all([ + expect(subscribePromise).to.eventually.be.fulfilled, + expect(eventPromise).to.eventually.be.equal('beacon'), + ]); }); }); diff --git a/test/setup/renderer.js b/test/setup/renderer.js index acfa87b7ed..a1bd11a4d8 100644 --- a/test/setup/renderer.js +++ b/test/setup/renderer.js @@ -2,8 +2,10 @@ const Enzyme = require('enzyme'); const Adapter = require('enzyme-adapter-react-16'); const chai = require('chai'); const spies = require('chai-spies'); +const chaiAsPromised = require('chai-as-promised'); chai.use(spies); +chai.use(chaiAsPromised); Enzyme.configure({ adapter: new Adapter(), @@ -1585,6 +1585,12 @@ caw@^1.0.1: object-assign "^3.0.0" tunnel-agent "^0.4.0" +chai-as-promised@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" + dependencies: + check-error "^1.0.2" + chai-spies@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/chai-spies/-/chai-spies-1.0.0.tgz#d16b39336fb316d03abf8c375feb23c0c8bb163d" @@ -1648,7 +1654,7 @@ charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" -check-error@^1.0.1: +check-error@^1.0.1, check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" |
