8. Добавляем Unit тесты на Jest в приложение на Node.JS


0) in global-error-handler.ts response.status(error.statusCode || error.httpCode).json(error); next(); 1) npm install --save-dev jest 2) npm i -D ts-jest @types/jest 3) npm i -D ts-jest 4) package.json -- { ... scripts { ... "test:unit": "jest --config=jest.config.js", }, ... } 5) create jest.config.js with code below: process.env.NODE_ENV = 'UNITTEST'; module.exports = { clearMocks: true, collectCoverage: true, collectCoverageFrom: [ './src/**/*.ts' ], coverageDirectory: ''стрелка влево'rootDir'стрелка вправо'/test/coverage', testEnvironment: 'node', testMatch: ['**/*.test.ts'], preset: 'ts-jest' }; 6) .eslintignore *.js node_modules dist coverage } 7) .eslintrc.json { ... "env": { "jest": true } ... } 8) test -- controller -- user-controller.test.ts describe('UserController', () ='стрелка вправо' { afterEach(() ='стрелка вправо' { jest.restoreAllMocks(); }); it('postOne', () ='стрелка вправо' { const userController = new UserController(); const testBody = { city: 'SPb' }; const res = userController.postOne(1, testBody as Info); expect(res).toBeUndefined(); }); } 9) in IDEA scripts: test:unit NODE_ENV=UNITTEST 10) Simple variant for IDEA: process.env.NODE_ENV = 'UNITTEST'; module.exports = { clearMocks: true, collectCoverage: false, testEnvironment: 'node', testMatch: ['**/*.test.ts'], preset: 'ts-jest' }; 11) npm i -D supertest @types/supertest 12) in user-controller.test.ts ... let server; ... beforeAll(async () ='стрелка вправо' { server = express(); server.use(bodyParser.json()); useExpressServer(server, { controllers: [UserController], // we specify controllers we want to use middlewares: [GlobalErrorHandler], defaultErrorHandler: false }); }); ... it('postOne with validations', done ='стрелка вправо' { request(server) .post('/users/1') .send({ country: 'Russia', city: 'SPb' } as Info) .expect(204) .end((err, res) ='стрелка вправо' { if (err) throw new Error(JSON.stringify(res.body)); done(); }); });

Смотрите также