Needling Perl Mongers

    typeorm-fixtures
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.4 • Public • Published

    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";
    
    // 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
      });
    });

    Install

    npm i typeorm-fixtures --save-dev
    yarn add typeorm-fixtures --dev

    Stay in touch

    Thanks for helping

    License

    Nest is MIT licensed.

    Contributing

    Install

    npm i typeorm-fixtures

    DownloadsWeekly Downloads

    84

    Version

    1.0.4

    License

    MIT

    Unpacked Size

    23.4 kB

    Total Files

    13

    Last publish

    Collaborators

    • altiore