While attempting to incorporate tests into my express/typeorm project, I encountered the following error:
throw new error_1.EntityMetadataNotFoundError(target);
^
EntityMetadataNotFoundError: No metadata for "Game" was found.
at DataSource.getMetadata (/home/nathanfouere/Documents/AubiaChallenge/src/data-source/DataSource.ts:444:30)
at Repository.get metadata [as metadata] (/home/nathanfouere/Documents/AubiaChallenge/src/repository/Repository.ts:53:40)
at Repository.findOne (/home/nathanfouere/Documents/AubiaChallenge/src/repository/Repository.ts:577:42)
at GameService.<anonymous> (/home/nathanfouere/Documents/AubiaChallenge/src/services/GameService.ts:60:61)
at step (/home/nathanfouere/Documents/AubiaChallenge/src/services/GameService.ts:33:23)
at Object.next (/home/nathanfouere/Documents/AubiaChallenge/src/services/GameService.ts:14:53)
at /home/nathanfouere/Documents/AubiaChallenge/src/services/GameService.ts:8:71
at new Promise (<anonymous>)
This is the test script:
import {GameService} from "../services/GameService";
import {aGame, aTemporarySocialClassHappinessModifier, aWorker} from "./Builders/Builders";
describe('Temporary social class modifier test', () => {
test('adds temporary social class happiness modifier', () => {
let duration = 4;
let temporarySocialClassHappinessModifier = aTemporarySocialClassHappinessModifier()
.withDuration(duration)
.withValue(40)
.build();
let worker = aWorker()
.withSocialClassHappinessModifiers([temporarySocialClassHappinessModifier])
.build();
let game = aGame()
.build();
let gameService = new GameService();
expect(worker.socialClassHappinessModifiers).toContain(temporarySocialClassHappinessModifier);
for (let i = 0; i < duration; i++) {
gameService.nextTurn();
}
expect(worker.socialClassHappinessModifiers).toContain(temporarySocialClassHappinessModifier);
});
});
This is the game entity structure:
import {Column, Entity, PrimaryGeneratedColumn} from "typeorm";
@Entity()
export class Game {
@PrimaryGeneratedColumn()
id: number
@Column()
numberOfTurns: number
}
Here is the tsconfig.json file configuration:
{
"compilerOptions": {
"lib": [
"es5",
"es6"
],
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"outDir": "./build",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"sourceMap": true
},
"include": ["src/entity/Game.ts"]
}
The jest.config.js setup is as follows:
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
testMatch: ['**/src/tests/**/*.test.ts'],
};
About the data-source.ts file:
import "reflect-metadata"
import { DataSource } from "typeorm"
import {PoliticalParty} from "./entity/PoliticalParty";
import {Region} from "./entity/Map/Region";
import {Workers} from "./entity/SocialClass/SocialClass";
import {Capitalists} from "./entity/SocialClass/SocialClass";
import {MixedProperty, PrivateProperty, Property, PublicProperty} from "./entity/Property/Property";
import {Game} from "./entity/Game";
import {StateSocialClass} from "./entity/SocialClass/SocialClass";
import {State} from "./entity/State/State";
import {Product} from "./entity/Products/Product";
import {SocialClassHappinessModifier} from "./entity/HappinessModifier/SocialClassHappinessModifier/SocialClassHappinessModifier";
import {PoliticalPartyHappinessModifier} from "./entity/HappinessModifier/PoliticalPartyHappinessModifier/PoliticalPartyHappinessModifier";
import {SocialClass} from "./entity/SocialClass/SocialClass";
export const AppDataSource = new DataSource({
type: "postgres",
host: "localhost",
port: 5432,
username: "postgres",
password: "postgres",
database: "postgres",
synchronize: true,
logging: false,
entities: [
PoliticalParty,
Region,
Workers,
Capitalists,
Workers,
Capitalists,
Property,
Game,
StateSocialClass,
State,
Product,
SocialClassHappinessModifier,
PoliticalPartyHappinessModifier,
SocialClass,
PublicProperty,
MixedProperty,
PrivateProperty,
],
migrations: [],
subscribers: [],
})
I am facing difficulty in setting up a new database solely for testing purposes and have been unsuccessful in finding effective solutions online. Any assistance or guidance on this matter would be highly appreciated.