idurar/idurar-erp-crm

[feat] setup jest and supertest for backend

Open

#346 opened on Aug 25, 2023

View on GitHub
 (9 comments) (0 reactions) (0 assignees)JavaScript (1,036 forks)batch import
good first issue🔧 Backend

Repository metrics

Stars
 (4,308 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

Hey,

I'd like to get your opinions on introducing Jest for unit testing on the backend and then secondary to that, creating a way to create test data for the unit tests.

I would propose changing a few structures first, for our controllers we have the file paths of

Controllers

controllers/erpControllers/adminController.js

I would propose to change this to

controllers/erpControllers/adminController/index.js
controllers/erpControllers/adminController/index.test.js

This could then be extended later to include index.test.integration.ts for integration tests.

Models

Currently we have our model files like so

models/erpModels/Admin.js

I'd like to change this so that a model can also have a generator to create the test data for that model.

models/erpModels/Admin/index.js
models/erpModels/Admin/generate.js

Generate.js

The generate.js would look something like:

const faker = require('@faker-js/faker');
const Admin = mongoose.model('Admin');

const generateAdmin = (input) => {
  return new Admin({
    ...input,
    surname: faker.name.lastName(),
    // More fields here
  })
}

export default generateAdmin

Test Data

We would want a way to create test data on the fly for whatever purpose it is required and be able to relate the data. I'd propose something like below:

    await resetDatabase({
      testData: {
        Admin: [{}],
        Employee: [{}, {}, {}],
        Expense: [{ expenseCategory: 0 }],
        ExpenseCategory: [{}]
      },
    });

This would create:

1 Admin, 3 Employee's, 1 Expensive which has an Expense cateogry and 1 Expense Category that belongs to an Expense

Contributor guide