Fixtures helper for typeorm
npm install typeorm-fixturesQuite often we have to load data into a database before running tests.
This library helps to solve this problem effortlessly.
#### 1. Create fixture creators (only once per project)
``typescript
import { fixtureCreator, many, one } from "typeorm-fixtures";
import { Role } from "../.."; // this is typeorm Entity
import { Project } from "../.."; // this is typeorm Entity
import { User } from "../.."; // this is typeorm Entity
// NOTICE: not arrow function here!
export const createUsersFixture = fixtureCreator
User,
function (entity, index) {
return {
email: test${index}@mail.com,
status: 10,
...entity,
roles: many(this, Role, entity.roles),
};
}
);
// NOTICE: not arrow function here!
export const createProjectsFixture = fixtureCreator
Project,
function (entity, index) {
return {
title: Default Title,`
...entity,
owner: one(this, User, entity.owner),
};
}
);
#### 2. Create fixtures (each time for certain test)
`typescript
export const usersFixture = createUsersFixture([
{
email: "user@mail.com",
roles: [{ name: "user" }], // roles will automatically added here (look usage)
},
{
email: "admin@mail.com",
roles: [{ name: "user" }, { name: "admin" }],
},
]);
export const projectsFixture = createProjectsFixture([
{
owner: { email: "admin@mail.com" }, // owner will automatically linked with user above
},
]);
`
#### 3. Download data before test and drop after
`typescript
import { TypeormFixtures } from "typeorm-fixtures";
// typeormf config from js/ts file or any other if required
const typeormConfig = {};
const h = new TypeormFixtures(false, typeormConfig)
.findEntities({ name: In(["user", "admin"]) }, Role) // sequence is important here!
.addFixture(usersFixture) // sequence is important here!
.addFixture(projectsFixture); // sequence is important here!
describe(GET /url, async () => {
let projectId: number;
let user: User;
beforeAll(async () => {
await h.loadFixtures();
projectId = h.entities.Project[0].id; // this is our project id, which was loaded
user = h.entities.User.find((el) => el.email === "user@mail.com"); // we also can find loaded user by email
});
afterAll(h.dropFixtures);
it("test", async () => {
// now all data loaded to database and you can perform any actions here
});
});
`
`bash`
npm i typeorm-fixtures --save-dev
`bash``
yarn add typeorm-fixtures --dev
- Author - Razzwan
- Artem Batura
- Volodymyr Steblii
Nest is MIT licensed.