summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2018-07-12 12:49:27 +0200
committerAndrej Mihajlov <and@mullvad.net>2018-07-16 20:34:15 +0200
commit377e730349d9ad864a109c771e8260b9e7273038 (patch)
treead4a8cb7298fed9caae69e7648361da53db10ab8
parent9cde5c51adb96d16e20580a73f59ac8e4ffdf23d (diff)
downloadmullvadvpn-377e730349d9ad864a109c771e8260b9e7273038.tar.xz
mullvadvpn-377e730349d9ad864a109c771e8260b9e7273038.zip
Add chai-as-promised to improve promise based tests
-rw-r--r--package.json1
-rw-r--r--test/jsonrpc-transport.spec.js97
-rw-r--r--test/setup/renderer.js2
-rw-r--r--yarn.lock8
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(),
diff --git a/yarn.lock b/yarn.lock
index e91968f1f1..9fda780257 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -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"