テストがうごかないのを修正 (#7566)
* startServer * typeorm 0.2.32 * Fix: chartのテストがテストの並び順によっては正しく初期化されない * initTestDb
This commit is contained in:
parent
334ca01092
commit
c071467b6a
11 changed files with 91 additions and 75 deletions
|
@ -2,6 +2,6 @@
|
|||
"extension": ["ts","js","cjs","mjs"],
|
||||
"require": ["ts-node/register", "tsconfig-paths/register"],
|
||||
"slow": 1000,
|
||||
"timeout": 30000,
|
||||
"timeout": 35000,
|
||||
"exit": true
|
||||
}
|
||||
|
|
|
@ -233,7 +233,7 @@
|
|||
"tslint": "6.1.3",
|
||||
"tslint-sonarts": "1.9.0",
|
||||
"twemoji-parser": "13.1.0",
|
||||
"typeorm": "0.2.34",
|
||||
"typeorm": "0.2.32",
|
||||
"typescript": "4.3.2",
|
||||
"ulid": "2.3.0",
|
||||
"uuid": "8.3.2",
|
||||
|
|
|
@ -12,12 +12,14 @@ process.env.NODE_ENV = 'test';
|
|||
|
||||
import * as assert from 'assert';
|
||||
import * as childProcess from 'child_process';
|
||||
import { async, signup, request, post, launchServer, shutdownServer } from './utils';
|
||||
import { async, signup, request, post, startServer, shutdownServer } from './utils';
|
||||
|
||||
describe('API visibility', () => {
|
||||
let p: childProcess.ChildProcess;
|
||||
|
||||
before(launchServer(g => p = g));
|
||||
before(async () => {
|
||||
p = await startServer();
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
await shutdownServer(p);
|
||||
|
|
|
@ -12,61 +12,28 @@ process.env.NODE_ENV = 'test';
|
|||
|
||||
import * as assert from 'assert';
|
||||
import * as lolex from '@sinonjs/fake-timers';
|
||||
import { async } from './utils';
|
||||
import { async, initTestDb } from './utils';
|
||||
import TestChart from '../src/services/chart/charts/classes/test';
|
||||
import TestGroupedChart from '../src/services/chart/charts/classes/test-grouped';
|
||||
import TestUniqueChart from '../src/services/chart/charts/classes/test-unique';
|
||||
import * as _TestChart from '../src/services/chart/charts/schemas/test';
|
||||
import * as _TestGroupedChart from '../src/services/chart/charts/schemas/test-grouped';
|
||||
import * as _TestUniqueChart from '../src/services/chart/charts/schemas/test-unique';
|
||||
import { Connection, getConnection, createConnection } from 'typeorm';
|
||||
import config from '../src/config';
|
||||
import Chart from '../src/services/chart/core';
|
||||
import { initDb } from '../src/db/postgre';
|
||||
|
||||
function initChartDb() {
|
||||
try {
|
||||
const conn = getConnection();
|
||||
return Promise.resolve(conn);
|
||||
} catch (e) {}
|
||||
|
||||
return createConnection({
|
||||
type: 'postgres',
|
||||
host: config.db.host,
|
||||
port: config.db.port,
|
||||
username: config.db.user,
|
||||
password: config.db.pass,
|
||||
database: config.db.db,
|
||||
synchronize: true,
|
||||
dropSchema: true,
|
||||
entities: [
|
||||
Chart.schemaToEntity(_TestChart.name, _TestChart.schema),
|
||||
Chart.schemaToEntity(_TestGroupedChart.name, _TestGroupedChart.schema),
|
||||
Chart.schemaToEntity(_TestUniqueChart.name, _TestUniqueChart.schema)
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
describe('Chart', () => {
|
||||
let testChart: TestChart;
|
||||
let testGroupedChart: TestGroupedChart;
|
||||
let testUniqueChart: TestUniqueChart;
|
||||
let clock: lolex.InstalledClock;
|
||||
let connection: Connection;
|
||||
let clock: lolex.Clock;
|
||||
|
||||
before(done => {
|
||||
initChartDb().then(c => {
|
||||
connection = c;
|
||||
done();
|
||||
});
|
||||
});
|
||||
beforeEach(async(async () => {
|
||||
await initTestDb(false, [
|
||||
Chart.schemaToEntity(_TestChart.name, _TestChart.schema),
|
||||
Chart.schemaToEntity(_TestGroupedChart.name, _TestGroupedChart.schema),
|
||||
Chart.schemaToEntity(_TestUniqueChart.name, _TestUniqueChart.schema)
|
||||
]);
|
||||
|
||||
after(async(async () => {
|
||||
await connection.close();
|
||||
await initDb(true, undefined, true);
|
||||
}));
|
||||
|
||||
beforeEach(done => {
|
||||
testChart = new TestChart();
|
||||
testGroupedChart = new TestGroupedChart();
|
||||
testUniqueChart = new TestUniqueChart();
|
||||
|
@ -74,13 +41,10 @@ describe('Chart', () => {
|
|||
clock = lolex.install({
|
||||
now: new Date(Date.UTC(2000, 0, 1, 0, 0, 0))
|
||||
});
|
||||
done();
|
||||
});
|
||||
}));
|
||||
|
||||
afterEach(async(async () => {
|
||||
clock.uninstall();
|
||||
await connection.dropDatabase();
|
||||
await connection.synchronize();
|
||||
}));
|
||||
|
||||
it('Can updates', async(async () => {
|
||||
|
|
|
@ -12,7 +12,7 @@ process.env.NODE_ENV = 'test';
|
|||
|
||||
import * as assert from 'assert';
|
||||
import * as childProcess from 'child_process';
|
||||
import { async, launchServer, signup, post, request, simpleGet, port, shutdownServer } from './utils';
|
||||
import { async, startServer, signup, post, request, simpleGet, port, shutdownServer } from './utils';
|
||||
import * as openapi from '@redocly/openapi-core';
|
||||
|
||||
// Request Accept
|
||||
|
@ -32,12 +32,13 @@ describe('Fetch resource', () => {
|
|||
let alice: any;
|
||||
let alicesPost: any;
|
||||
|
||||
before(launchServer(g => p = g, async () => {
|
||||
before(async () => {
|
||||
p = await startServer();
|
||||
alice = await signup({ username: 'alice' });
|
||||
alicesPost = await post(alice, {
|
||||
text: 'test'
|
||||
});
|
||||
}));
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
await shutdownServer(p);
|
||||
|
|
|
@ -12,7 +12,7 @@ process.env.NODE_ENV = 'test';
|
|||
|
||||
import * as assert from 'assert';
|
||||
import * as childProcess from 'child_process';
|
||||
import { async, signup, request, post, react, connectStream, launchServer, shutdownServer } from './utils';
|
||||
import { async, signup, request, post, react, connectStream, startServer, shutdownServer } from './utils';
|
||||
|
||||
describe('Mute', () => {
|
||||
let p: childProcess.ChildProcess;
|
||||
|
@ -22,11 +22,12 @@ describe('Mute', () => {
|
|||
let bob: any;
|
||||
let carol: any;
|
||||
|
||||
before(launchServer(g => p = g, async () => {
|
||||
before(async () => {
|
||||
p = await startServer();
|
||||
alice = await signup({ username: 'alice' });
|
||||
bob = await signup({ username: 'bob' });
|
||||
carol = await signup({ username: 'carol' });
|
||||
}));
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
await shutdownServer(p);
|
||||
|
|
10
test/note.ts
10
test/note.ts
|
@ -12,9 +12,8 @@ process.env.NODE_ENV = 'test';
|
|||
|
||||
import * as assert from 'assert';
|
||||
import * as childProcess from 'child_process';
|
||||
import { async, signup, request, post, uploadFile, launchServer, shutdownServer } from './utils';
|
||||
import { async, signup, request, post, uploadFile, startServer, shutdownServer, initTestDb } from './utils';
|
||||
import { Note } from '../src/models/entities/note';
|
||||
import { initDb } from '../src/db/postgre';
|
||||
|
||||
describe('Note', () => {
|
||||
let p: childProcess.ChildProcess;
|
||||
|
@ -23,12 +22,13 @@ describe('Note', () => {
|
|||
let alice: any;
|
||||
let bob: any;
|
||||
|
||||
before(launchServer(g => p = g, async () => {
|
||||
const connection = await initDb(true);
|
||||
before(async () => {
|
||||
p = await startServer();
|
||||
const connection = await initTestDb(true);
|
||||
Notes = connection.getRepository(Note);
|
||||
alice = await signup({ username: 'alice' });
|
||||
bob = await signup({ username: 'bob' });
|
||||
}));
|
||||
});
|
||||
|
||||
after(async () => {
|
||||
await shutdownServer(p);
|
||||
|
|
|
@ -12,21 +12,21 @@ process.env.NODE_ENV = 'test';
|
|||
|
||||
import * as assert from 'assert';
|
||||
import * as childProcess from 'child_process';
|
||||
import { connectStream, signup, request, post, launchServer } from './utils';
|
||||
import { connectStream, signup, request, post, startServer, shutdownServer, initTestDb } from './utils';
|
||||
import { Following } from '../src/models/entities/following';
|
||||
import { initDb } from '../src/db/postgre';
|
||||
|
||||
describe('Streaming', () => {
|
||||
let p: childProcess.ChildProcess;
|
||||
let Followings: any;
|
||||
|
||||
beforeEach(launchServer(g => p = g, async () => {
|
||||
const connection = await initDb(true);
|
||||
beforeEach(async () => {
|
||||
p = await startServer();
|
||||
const connection = await initTestDb(true);
|
||||
Followings = connection.getRepository(Following);
|
||||
}));
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
p.kill();
|
||||
afterEach(async () => {
|
||||
await shutdownServer(p);
|
||||
});
|
||||
|
||||
const follow = async (follower: any, followee: any) => {
|
||||
|
|
|
@ -12,7 +12,7 @@ process.env.NODE_ENV = 'test';
|
|||
|
||||
import * as assert from 'assert';
|
||||
import * as childProcess from 'child_process';
|
||||
import { async, signup, request, post, uploadFile, launchServer, shutdownServer } from './utils';
|
||||
import { async, signup, request, post, uploadFile, startServer, shutdownServer } from './utils';
|
||||
|
||||
describe('users/notes', () => {
|
||||
let p: childProcess.ChildProcess;
|
||||
|
@ -22,7 +22,8 @@ describe('users/notes', () => {
|
|||
let pngNote: any;
|
||||
let jpgPngNote: any;
|
||||
|
||||
before(launchServer(g => p = g, async () => {
|
||||
before(async () => {
|
||||
p = await startServer();
|
||||
alice = await signup({ username: 'alice' });
|
||||
const jpg = await uploadFile(alice, __dirname + '/resources/Lenna.jpg');
|
||||
const png = await uploadFile(alice, __dirname + '/resources/Lenna.png');
|
||||
|
@ -35,7 +36,7 @@ describe('users/notes', () => {
|
|||
jpgPngNote = await post(alice, {
|
||||
fileIds: [jpg.id, png.id]
|
||||
});
|
||||
}));
|
||||
});
|
||||
|
||||
after(async() => {
|
||||
await shutdownServer(p);
|
||||
|
|
|
@ -6,8 +6,11 @@ import * as childProcess from 'child_process';
|
|||
import * as http from 'http';
|
||||
import loadConfig from '../src/config/load';
|
||||
import { SIGKILL } from 'constants';
|
||||
import { createConnection, getConnection } from 'typeorm';
|
||||
import { entities } from '../src/db/postgre';
|
||||
|
||||
export const port = loadConfig().port;
|
||||
const config = loadConfig();
|
||||
export const port = config.port;
|
||||
|
||||
export const async = (fn: Function) => (done: Function) => {
|
||||
fn().then(() => {
|
||||
|
@ -147,6 +150,50 @@ export function launchServer(callbackSpawnedProcess: (p: childProcess.ChildProce
|
|||
};
|
||||
}
|
||||
|
||||
export async function initTestDb(justBorrow = false, initEntities?: any[]) {
|
||||
if (process.env.NODE_ENV !== 'test') throw 'NODE_ENV is not a test';
|
||||
|
||||
try {
|
||||
const conn = await getConnection();
|
||||
await conn.close();
|
||||
} catch (e) {}
|
||||
|
||||
return await createConnection({
|
||||
type: 'postgres',
|
||||
host: config.db.host,
|
||||
port: config.db.port,
|
||||
username: config.db.user,
|
||||
password: config.db.pass,
|
||||
database: config.db.db,
|
||||
synchronize: true && !justBorrow,
|
||||
dropSchema: true && !justBorrow,
|
||||
entities: initEntities || entities
|
||||
});
|
||||
}
|
||||
|
||||
export function startServer(timeout = 30 * 1000): Promise<childProcess.ChildProcess> {
|
||||
return new Promise((res, rej) => {
|
||||
const t = setTimeout(() => {
|
||||
p.kill(SIGKILL);
|
||||
rej('timeout to start');
|
||||
}, timeout);
|
||||
|
||||
const p = childProcess.spawn('node', [__dirname + '/../index.js'], {
|
||||
stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
|
||||
env: { NODE_ENV: 'test', PATH: process.env.PATH }
|
||||
});
|
||||
|
||||
p.on('error', e => rej(e));
|
||||
|
||||
p.on('message', message => {
|
||||
if (message === 'ok') {
|
||||
clearTimeout(t);
|
||||
res(p);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
export function shutdownServer(p: childProcess.ChildProcess, timeout = 20 * 1000) {
|
||||
return new Promise((res, rej) => {
|
||||
const t = setTimeout(() => {
|
||||
|
|
|
@ -10973,10 +10973,10 @@ typedarray@^0.0.6:
|
|||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
|
||||
|
||||
typeorm@0.2.34:
|
||||
version "0.2.34"
|
||||
resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.34.tgz#637b3cec2de54ee7f423012b813a2022c0aacc8b"
|
||||
integrity sha512-FZAeEGGdSGq7uTH3FWRQq67JjKu0mgANsSZ04j3kvDYNgy9KwBl/6RFgMVgiSgjf7Rqd7NrhC2KxVT7I80qf7w==
|
||||
typeorm@0.2.32:
|
||||
version "0.2.32"
|
||||
resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.32.tgz#544dbfdfe0cd0887548d9bcbd28527ea4f4b3c9b"
|
||||
integrity sha512-LOBZKZ9As3f8KRMPCUT2H0JZbZfWfkcUnO3w/1BFAbL/X9+cADTF6bczDGGaKVENJ3P8SaKheKmBgpt5h1x+EQ==
|
||||
dependencies:
|
||||
"@sqltools/formatter" "^1.2.2"
|
||||
app-root-path "^3.0.0"
|
||||
|
|
Loading…
Reference in a new issue