0.8.5 • Published 7 years ago
@vent/typeorm-fixtures v0.8.5
Why we need it?
Quite often we have to load data into a database before running tests. This library helps to solve this problem effortlessly.
Usage example:
1. Create fixture creators (only once per project)
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>(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>(Project, function(
  entity,
  index
) {
  return {
    title: `Default Title`,
    ...entity,
    owner: one(this, User, entity.owner)
  };
});2. Create fixtures (each time for certain test)
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
import { TypeormFixtures } from "typeorm-fixtures";
const h = new TypeormFixtures()
  .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
  });
});Install
npm i typeorm-fixtures --save-devyarn add typeorm-fixtures --devStay in touch
- Author - Razzwan
 
Thanks for helping
License
Nest is MIT licensed.
Contributing
0.8.5
7 years ago