0

index.ts:

import 'reflect-metadata'
import express from 'express'
import { EntityManager, EntityRepository, MikroORM, RequestContext } from '@mikro-orm/core'
import options from '../mikro-orm.config'
import { Music } from './entities/music.entity'
import router from './routes'

const app = express()

export const DI = {} as {
    orm: MikroORM,
    em: EntityManager,
    musicRepository: EntityRepository<Music>
}

async function bootstrap() {

    DI.orm = await MikroORM.init(options)

    DI.em = DI.orm.em
    DI.musicRepository = DI.orm.em.getRepository(Music)

    app.use(express.json())
    app.use(express.urlencoded({ extended: true }))
    app.use((req, res, next) => RequestContext.create(DI.orm.em, next))
    app.use(router)

    return { app, DI }

}

bootstrap()

export default bootstrap

music.test.ts

import request from 'supertest'
import bootstrap from '../index'

describe('musics', () => {

    it('should search the musics', async () => {

        const { DI, app } = await bootstrap()
    request(app)
        .get('/musics')
        .expect(200)
        .end()

    await DI.orm.close()

})

}))

つまり、すべてのテストが終了した後に接続を閉じたいのですが、「it」スコープ内でのみ呼び出すことができる関数ブートストラップによって ORM 接続が返されるため、これを行うことはできません。

誰でも私がこのようなことをするのを手伝ってもらえますか?

describe('musics', () => {

    afterAll(async () => {
        await DI.orm.close()
    })

    it('should search the musics', async () => {

        const { DI, app } = await bootstrap()

        request(app)
            .get('/musics')
            .expect(200)
            .end()

    })

})

リポジトリは次のとおりです: https://github.com/brenomacedo/g-track/tree/master/backend

4

1 に答える 1

1

フックを使用beforeAllして接続を作成し、結果を外部スコープに格納します。

describe('musics', () => {

    let context: any = {}; // TODO type this properly

    beforeAll(async () => {
        context = await bootstrap()
    })

    afterAll(async () => {
        await context.DI.orm.close()
    })

    it('should search the musics', async () => {
        request(context.app)
            .get('/musics')
            .expect(200)
            .end()

    })

})
于 2021-08-23T07:28:13.780 に答える