Skip to content
This repository was archived by the owner on Apr 19, 2020. It is now read-only.

Commit 2c848e4

Browse files
committed
Setup test environment
1 parent 429d1b6 commit 2c848e4

File tree

4 files changed

+74
-4
lines changed

4 files changed

+74
-4
lines changed

.travis.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ install:
1010
- yarn
1111
before_script:
1212
- yarn build
13-
# - docker-compose -f docker-compose.test.yml up -d
13+
- docker-compose -f docker-compose.test.yml up -d
1414
script:
1515
- jest --ci --coverage
16-
# after_script:
17-
# - docker-compose -f docker-compose.test.yml down
16+
after_script:
17+
- docker-compose -f docker-compose.test.yml down
1818
after_success:
1919
- npx codecov

docker-compose.test.yml

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
version: '3.1'
2+
3+
services:
4+
database:
5+
image: mongo:3.6-xenial
6+
restart: always
7+
environment:
8+
MONGO_INITDB_ROOT_USERNAME: mongo
9+
MONGO_INITDB_ROOT_PASSWORD: mongo
10+
ports:
11+
- 27017:27017

jest.config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
module.exports = {
2-
testEnvironment: 'node',
2+
testEnvironment: './jest.env.js',
33
testPathIgnorePatterns: ['/node_modules/', '__utils__\\.test\\.[jt]s$']
44
};

jest.env.js

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
const NodeEnvironment = require('jest-environment-node');
2+
const { MongoClient } = require('mongodb');
3+
4+
const user = 'mongo';
5+
const password = 'mongo';
6+
const database = 'synor';
7+
const uri = `mongodb://${user}:${password}@127.0.0.1:27017`;
8+
9+
const sleep = async ms => new Promise(resolve => setTimeout(resolve, ms));
10+
11+
const connectToMongoDB = async () => {
12+
const client = await MongoClient.connect(uri, { poolSize: 1 });
13+
const db = client.db(database);
14+
return { client, db };
15+
};
16+
17+
async function waitForMongoDB() {
18+
try {
19+
const { client, db } = await connectToMongoDB();
20+
21+
await db
22+
.command({ usersInfo: { user, db: database } })
23+
.then(({ users }) => {
24+
const userExists = users.length;
25+
if (!userExists) {
26+
return db.addUser(user, password, {
27+
roles: [{ role: 'dbOwner', db: database }]
28+
});
29+
}
30+
});
31+
32+
await client.close();
33+
} catch (_) {
34+
await sleep(1000);
35+
return waitForMongoDB();
36+
}
37+
}
38+
39+
class SynorDatabaseMongoDBTestEnvironment extends NodeEnvironment {
40+
constructor(config, context) {
41+
super(config, context);
42+
this.docblockPragmas = context.docblockPragmas;
43+
}
44+
45+
async setup() {
46+
await super.setup();
47+
await waitForMongoDB();
48+
}
49+
50+
async teardown() {
51+
await super.teardown();
52+
}
53+
54+
runScript(script) {
55+
return super.runScript(script);
56+
}
57+
}
58+
59+
module.exports = SynorDatabaseMongoDBTestEnvironment;

0 commit comments

Comments
 (0)