NestJS

NestJS + TypeORM + PostgreSQLにおけるTypeORMの設定のentitiesの設定について

NestJS + TypeORM + PostgreSQLにおけるTypeORMの設定のentitiesの設定について、サーバーを起動する場合と、npm run testでテストする場合とで、設定をかえないといけないです。
※ぐぐると、entitiesの設定についてはまっている方が多いけど、いまいちしゃきっとした回答が見つかりませんでした。自分もいろいろ試行錯誤した結果、下に書いた内容に行き着いたのですが、どうしてそうなるのかをちゃんと説明できない(調べられない)です。分かる方にご教示頂きたいです…

[困ったこと]
NestJS + TypeORM + PostgreSQLの構成でサーバーは問題なく起動し、リクエストに対してレスポンスを返すのですが、npm run test(Jestによるテスト)をすると以下のエラーが発生しテストが失敗する。
    RepositoryNotFoundError: No repository for "Users" was found. Looks like this entity is not registered in current "default" connection?

[TypeORMの設定]
app.module.tsで
@Module({
  imports: [
    TypeOrmModule.forRoot(),
    TypeOrmModule.forFeature([Users]),
  ],
とし、ルートディレクトリにormconfig.jsonを配置した。
ormconfig.jsonの内容は以下のとおり。
{
  "name": "default",
  "type": "postgres",
  "host": "localhost",
  "port": 5432,
  "username": "postgres",
  "password": "postgres",
  "database": "pong",
  "entities": ["dist/entities/**/*.entity.js"],
  "migrations": ["dist/migrations/**/*.js"],
  "logging": false,
  "synchronize": false
}

[解決方法]
npm run test(Jestによるテスト)の場合は、entitiesを以下のように設定する。
["./src/entities/**/*.entity.ts"]
具体的には、spec.tsファイルを以下のように書いた。
describe("AppController", () => {
  let appController: AppController;
  let app: TestingModule;

  beforeAll(async () => {
    app = await Test.createTestingModule({
      imports: [
        TypeOrmModule.forRoot(),
        TypeOrmModule.forRootAsync({
          useFactory: async () =>
            Object.assign(await getConnectionOptions(), {
              entities: getEntites(),
            }),
        }),
        TypeOrmModule.forFeature([Users]),
      ],
(中略)
    }).compile();

    appController = app.get(AppController);
  });

  afterAll(() => app.close());

getEntites()の内容は以下のとおり。
export function getEntites() {
  return ["./src/entities/**/*.entity.ts"];
}

[考えたこと]
  "entities": ["dist/entities/**/*.entity.js"],
と設定して、Jestでテストをしようとすると
RepositoryNotFoundError: No repository for "Users" was found. Looks like this entity is not registered in current "default" connection?
となる。
  "entities": ["./src/entities/**/*.entity.ts"],
と設定して、npm run start:devすると
[Nest] 17012  - 2021/12/08 16:53:42   ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)...
D:\42\ft_transcendence\github\pong\server\src\entities\accomplishes.entity.ts:1
import {
^^^^^^

SyntaxError: Cannot use import statement outside a module
となる。 以上から、NestJSはコンパイルされたJavaScriptで動作するので、TypeORMに読み込ませるEntityの情報はJavaScript(.js)でなければならない(importがSyntaxErrorになる)のに対して、Jestでテストをする場合、テストファイルはTypeScriptで書かれているものをJestがトランスコンパイルして生成されたJavascriptで動作するので、TypeORMに読み込ませるEntityの情報は(おそらく依存関係の解決のために)TypeScript(.ts)でなければならない(dist/entities/*/.entity.jsを読み込んでくれない?)のだと思います、たぶん… ちゃんとした理由をご存知でしたらご教示頂きたいです。

[試験環境]
https://github.com/hiroin/typeorm-setting-entities

Jest did not exit one second after the test run has completed.

NestJSのe2eテストで以下のメッセージが出てテストの応答がとても遅い事象が発生しました。
Jest did not exit one second after the test run has completed.

This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.
この問題は、e2eテストのファイルに以下を追記することで解決します。
  afterEach(async () => {
    await app.close();
  });
上記を書かないと、テスト項目ごとにデータベースへのセッションをはりにいってしまうため、以下のエラーメッセージがでてテストに失敗します。
[Nest] 33348  - 2021/11/05 9:21:04   ERROR [TypeOrmModule] Unable to connect to the database. Retrying (1)...
AlreadyHasActiveConnectionError: Cannot create a new connection named "default", because connection with such name already exist and it now has an active connection session.

記事検索