テストがうごかないのを修正 (#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"], | 	"extension": ["ts","js","cjs","mjs"], | ||||||
| 	"require": ["ts-node/register", "tsconfig-paths/register"], | 	"require": ["ts-node/register", "tsconfig-paths/register"], | ||||||
| 	"slow": 1000, | 	"slow": 1000, | ||||||
| 	"timeout": 30000, | 	"timeout": 35000, | ||||||
| 	"exit": true | 	"exit": true | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -233,7 +233,7 @@ | ||||||
| 		"tslint": "6.1.3", | 		"tslint": "6.1.3", | ||||||
| 		"tslint-sonarts": "1.9.0", | 		"tslint-sonarts": "1.9.0", | ||||||
| 		"twemoji-parser": "13.1.0", | 		"twemoji-parser": "13.1.0", | ||||||
| 		"typeorm": "0.2.34", | 		"typeorm": "0.2.32", | ||||||
| 		"typescript": "4.3.2", | 		"typescript": "4.3.2", | ||||||
| 		"ulid": "2.3.0", | 		"ulid": "2.3.0", | ||||||
| 		"uuid": "8.3.2", | 		"uuid": "8.3.2", | ||||||
|  |  | ||||||
|  | @ -12,12 +12,14 @@ process.env.NODE_ENV = 'test'; | ||||||
| 
 | 
 | ||||||
| import * as assert from 'assert'; | import * as assert from 'assert'; | ||||||
| import * as childProcess from 'child_process'; | 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', () => { | describe('API visibility', () => { | ||||||
| 	let p: childProcess.ChildProcess; | 	let p: childProcess.ChildProcess; | ||||||
| 
 | 
 | ||||||
| 	before(launchServer(g => p = g)); | 	before(async () => { | ||||||
|  | 		p = await startServer(); | ||||||
|  | 	}); | ||||||
| 
 | 
 | ||||||
| 	after(async () => { | 	after(async () => { | ||||||
| 		await shutdownServer(p); | 		await shutdownServer(p); | ||||||
|  |  | ||||||
|  | @ -12,61 +12,28 @@ process.env.NODE_ENV = 'test'; | ||||||
| 
 | 
 | ||||||
| import * as assert from 'assert'; | import * as assert from 'assert'; | ||||||
| import * as lolex from '@sinonjs/fake-timers'; | 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 TestChart from '../src/services/chart/charts/classes/test'; | ||||||
| import TestGroupedChart from '../src/services/chart/charts/classes/test-grouped'; | import TestGroupedChart from '../src/services/chart/charts/classes/test-grouped'; | ||||||
| import TestUniqueChart from '../src/services/chart/charts/classes/test-unique'; | import TestUniqueChart from '../src/services/chart/charts/classes/test-unique'; | ||||||
| import * as _TestChart from '../src/services/chart/charts/schemas/test'; | import * as _TestChart from '../src/services/chart/charts/schemas/test'; | ||||||
| import * as _TestGroupedChart from '../src/services/chart/charts/schemas/test-grouped'; | import * as _TestGroupedChart from '../src/services/chart/charts/schemas/test-grouped'; | ||||||
| import * as _TestUniqueChart from '../src/services/chart/charts/schemas/test-unique'; | 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 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', () => { | describe('Chart', () => { | ||||||
| 	let testChart: TestChart; | 	let testChart: TestChart; | ||||||
| 	let testGroupedChart: TestGroupedChart; | 	let testGroupedChart: TestGroupedChart; | ||||||
| 	let testUniqueChart: TestUniqueChart; | 	let testUniqueChart: TestUniqueChart; | ||||||
| 	let clock: lolex.InstalledClock; | 	let clock: lolex.Clock; | ||||||
| 	let connection: Connection; |  | ||||||
| 
 | 
 | ||||||
| 	before(done => { | 	beforeEach(async(async () => { | ||||||
| 		initChartDb().then(c => { | 		await initTestDb(false, [ | ||||||
| 			connection = c; | 			Chart.schemaToEntity(_TestChart.name, _TestChart.schema), | ||||||
| 			done(); | 			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(); | 		testChart = new TestChart(); | ||||||
| 		testGroupedChart = new TestGroupedChart(); | 		testGroupedChart = new TestGroupedChart(); | ||||||
| 		testUniqueChart = new TestUniqueChart(); | 		testUniqueChart = new TestUniqueChart(); | ||||||
|  | @ -74,13 +41,10 @@ describe('Chart', () => { | ||||||
| 		clock = lolex.install({ | 		clock = lolex.install({ | ||||||
| 			now: new Date(Date.UTC(2000, 0, 1, 0, 0, 0)) | 			now: new Date(Date.UTC(2000, 0, 1, 0, 0, 0)) | ||||||
| 		}); | 		}); | ||||||
| 		done(); | 	})); | ||||||
| 	}); |  | ||||||
| 
 | 
 | ||||||
| 	afterEach(async(async () => { | 	afterEach(async(async () => { | ||||||
| 		clock.uninstall(); | 		clock.uninstall(); | ||||||
| 		await connection.dropDatabase(); |  | ||||||
| 		await connection.synchronize(); |  | ||||||
| 	})); | 	})); | ||||||
| 
 | 
 | ||||||
| 	it('Can updates', async(async () => { | 	it('Can updates', async(async () => { | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ process.env.NODE_ENV = 'test'; | ||||||
| 
 | 
 | ||||||
| import * as assert from 'assert'; | import * as assert from 'assert'; | ||||||
| import * as childProcess from 'child_process'; | 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'; | import * as openapi from '@redocly/openapi-core'; | ||||||
| 
 | 
 | ||||||
| // Request Accept
 | // Request Accept
 | ||||||
|  | @ -32,12 +32,13 @@ describe('Fetch resource', () => { | ||||||
| 	let alice: any; | 	let alice: any; | ||||||
| 	let alicesPost: any; | 	let alicesPost: any; | ||||||
| 
 | 
 | ||||||
| 	before(launchServer(g => p = g, async () => { | 	before(async () => { | ||||||
|  | 		p = await startServer(); | ||||||
| 		alice = await signup({ username: 'alice' }); | 		alice = await signup({ username: 'alice' }); | ||||||
| 		alicesPost = await post(alice, { | 		alicesPost = await post(alice, { | ||||||
| 			text: 'test' | 			text: 'test' | ||||||
| 		}); | 		}); | ||||||
| 	})); | 	}); | ||||||
| 
 | 
 | ||||||
| 	after(async () => { | 	after(async () => { | ||||||
| 		await shutdownServer(p); | 		await shutdownServer(p); | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ process.env.NODE_ENV = 'test'; | ||||||
| 
 | 
 | ||||||
| import * as assert from 'assert'; | import * as assert from 'assert'; | ||||||
| import * as childProcess from 'child_process'; | 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', () => { | describe('Mute', () => { | ||||||
| 	let p: childProcess.ChildProcess; | 	let p: childProcess.ChildProcess; | ||||||
|  | @ -22,11 +22,12 @@ describe('Mute', () => { | ||||||
| 	let bob: any; | 	let bob: any; | ||||||
| 	let carol: any; | 	let carol: any; | ||||||
| 
 | 
 | ||||||
| 	before(launchServer(g => p = g, async () => { | 	before(async () => { | ||||||
|  | 		p = await startServer(); | ||||||
| 		alice = await signup({ username: 'alice' }); | 		alice = await signup({ username: 'alice' }); | ||||||
| 		bob = await signup({ username: 'bob' }); | 		bob = await signup({ username: 'bob' }); | ||||||
| 		carol = await signup({ username: 'carol' }); | 		carol = await signup({ username: 'carol' }); | ||||||
| 	})); | 	}); | ||||||
| 
 | 
 | ||||||
| 	after(async () => { | 	after(async () => { | ||||||
| 		await shutdownServer(p); | 		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 assert from 'assert'; | ||||||
| import * as childProcess from 'child_process'; | 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 { Note } from '../src/models/entities/note'; | ||||||
| import { initDb } from '../src/db/postgre'; |  | ||||||
| 
 | 
 | ||||||
| describe('Note', () => { | describe('Note', () => { | ||||||
| 	let p: childProcess.ChildProcess; | 	let p: childProcess.ChildProcess; | ||||||
|  | @ -23,12 +22,13 @@ describe('Note', () => { | ||||||
| 	let alice: any; | 	let alice: any; | ||||||
| 	let bob: any; | 	let bob: any; | ||||||
| 
 | 
 | ||||||
| 	before(launchServer(g => p = g, async () => { | 	before(async () => { | ||||||
| 		const connection = await initDb(true); | 		p = await startServer(); | ||||||
|  | 		const connection = await initTestDb(true); | ||||||
| 		Notes = connection.getRepository(Note); | 		Notes = connection.getRepository(Note); | ||||||
| 		alice = await signup({ username: 'alice' }); | 		alice = await signup({ username: 'alice' }); | ||||||
| 		bob = await signup({ username: 'bob' }); | 		bob = await signup({ username: 'bob' }); | ||||||
| 	})); | 	}); | ||||||
| 
 | 
 | ||||||
| 	after(async () => { | 	after(async () => { | ||||||
| 		await shutdownServer(p); | 		await shutdownServer(p); | ||||||
|  |  | ||||||
|  | @ -12,21 +12,21 @@ process.env.NODE_ENV = 'test'; | ||||||
| 
 | 
 | ||||||
| import * as assert from 'assert'; | import * as assert from 'assert'; | ||||||
| import * as childProcess from 'child_process'; | 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 { Following } from '../src/models/entities/following'; | ||||||
| import { initDb } from '../src/db/postgre'; |  | ||||||
| 
 | 
 | ||||||
| describe('Streaming', () => { | describe('Streaming', () => { | ||||||
| 	let p: childProcess.ChildProcess; | 	let p: childProcess.ChildProcess; | ||||||
| 	let Followings: any; | 	let Followings: any; | ||||||
| 
 | 
 | ||||||
| 	beforeEach(launchServer(g => p = g, async () => { | 	beforeEach(async () => { | ||||||
| 		const connection = await initDb(true); | 		p = await startServer(); | ||||||
|  | 		const connection = await initTestDb(true); | ||||||
| 		Followings = connection.getRepository(Following); | 		Followings = connection.getRepository(Following); | ||||||
| 	})); | 	}); | ||||||
| 
 | 
 | ||||||
| 	afterEach(() => { | 	afterEach(async () => { | ||||||
| 		p.kill(); | 		await shutdownServer(p); | ||||||
| 	}); | 	}); | ||||||
| 
 | 
 | ||||||
| 	const follow = async (follower: any, followee: any) => { | 	const follow = async (follower: any, followee: any) => { | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ process.env.NODE_ENV = 'test'; | ||||||
| 
 | 
 | ||||||
| import * as assert from 'assert'; | import * as assert from 'assert'; | ||||||
| import * as childProcess from 'child_process'; | 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', () => { | describe('users/notes', () => { | ||||||
| 	let p: childProcess.ChildProcess; | 	let p: childProcess.ChildProcess; | ||||||
|  | @ -22,7 +22,8 @@ describe('users/notes', () => { | ||||||
| 	let pngNote: any; | 	let pngNote: any; | ||||||
| 	let jpgPngNote: any; | 	let jpgPngNote: any; | ||||||
| 
 | 
 | ||||||
| 	before(launchServer(g => p = g, async () => { | 	before(async () => { | ||||||
|  | 		p = await startServer(); | ||||||
| 		alice = await signup({ username: 'alice' }); | 		alice = await signup({ username: 'alice' }); | ||||||
| 		const jpg = await uploadFile(alice, __dirname + '/resources/Lenna.jpg'); | 		const jpg = await uploadFile(alice, __dirname + '/resources/Lenna.jpg'); | ||||||
| 		const png = await uploadFile(alice, __dirname + '/resources/Lenna.png'); | 		const png = await uploadFile(alice, __dirname + '/resources/Lenna.png'); | ||||||
|  | @ -35,7 +36,7 @@ describe('users/notes', () => { | ||||||
| 		jpgPngNote = await post(alice, { | 		jpgPngNote = await post(alice, { | ||||||
| 			fileIds: [jpg.id, png.id] | 			fileIds: [jpg.id, png.id] | ||||||
| 		}); | 		}); | ||||||
| 	})); | 	}); | ||||||
| 
 | 
 | ||||||
| 	after(async() => { | 	after(async() => { | ||||||
| 		await shutdownServer(p); | 		await shutdownServer(p); | ||||||
|  |  | ||||||
|  | @ -6,8 +6,11 @@ import * as childProcess from 'child_process'; | ||||||
| import * as http from 'http'; | import * as http from 'http'; | ||||||
| import loadConfig from '../src/config/load'; | import loadConfig from '../src/config/load'; | ||||||
| import { SIGKILL } from 'constants'; | 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) => { | export const async = (fn: Function) => (done: Function) => { | ||||||
| 	fn().then(() => { | 	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) { | export function shutdownServer(p: childProcess.ChildProcess, timeout = 20 * 1000) { | ||||||
| 	return new Promise((res, rej) => { | 	return new Promise((res, rej) => { | ||||||
| 		const t = setTimeout(() => { | 		const t = setTimeout(() => { | ||||||
|  |  | ||||||
|  | @ -10973,10 +10973,10 @@ typedarray@^0.0.6: | ||||||
|   resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" |   resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" | ||||||
|   integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= |   integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= | ||||||
| 
 | 
 | ||||||
| typeorm@0.2.34: | typeorm@0.2.32: | ||||||
|   version "0.2.34" |   version "0.2.32" | ||||||
|   resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.34.tgz#637b3cec2de54ee7f423012b813a2022c0aacc8b" |   resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.32.tgz#544dbfdfe0cd0887548d9bcbd28527ea4f4b3c9b" | ||||||
|   integrity sha512-FZAeEGGdSGq7uTH3FWRQq67JjKu0mgANsSZ04j3kvDYNgy9KwBl/6RFgMVgiSgjf7Rqd7NrhC2KxVT7I80qf7w== |   integrity sha512-LOBZKZ9As3f8KRMPCUT2H0JZbZfWfkcUnO3w/1BFAbL/X9+cADTF6bczDGGaKVENJ3P8SaKheKmBgpt5h1x+EQ== | ||||||
|   dependencies: |   dependencies: | ||||||
|     "@sqltools/formatter" "^1.2.2" |     "@sqltools/formatter" "^1.2.2" | ||||||
|     app-root-path "^3.0.0" |     app-root-path "^3.0.0" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue