Skip to main content

Command Palette

Search for a command to run...

Setup Express, Typescript, dan Jest

Updated
3 min read
Setup Express, Typescript, dan Jest
A

I am a Junior Fullstack Developer who currently study at University of Merdeka Malang majoring in Management Information Systems. Interested in Devops, Cloud Computing and Microservice.

Halo semuanya, ini adalah artikel kedua saya dan disini mungkin saya akan membahas atau memberikan tutorial tentang cara setup aplikasi Express dengan Typescript dan Jest. Nah alasan saya bikin artikel ini sebenarnya karena saya sendiri itu kadang pelupa, saya sering gonta-ganti framework dalam ngerjain suatu project, misal projek pertama saya pakai Express, projek kedua pakai Laravel, projek ketiga pindah lagi ke Flutter, nah ini yang bikin saya sering lupa. Akhirnya saya buat artikel ini biar gampang ngingatnya sekalian share juga ke kalian tentang cara setupnya. Kalau begitu tanpa basa basi lagi kita mulai pembahasannya..

Langkah Setup

  1. Langkah pertama yang harus dilakukan adalah kita buat projectnya terlebih dahulu, yaitu kita pakai..

    npm init -y
    
  2. Kemudian kita perlu setup tsconfig nya.

    tsc --init
    
  3. Selanjutnya kita install terlebih dahulu dependecy-dependency nya.

    yarn add express
    yarn add -D typescript @types/express @types/node jest @types/jest ts-jest supertest @types/supertest ts-node-dev
    

    Note: Jadi disini kita perlu install typescript, express, jest, ts-jest, supertest dan ts-node-dev. ts-jest disini dipakai supaya kita bisa menggunakan import di file test kita.

  4. Kita buat file jest.config.json dan kita ketik.

    module.exports = {
     "testPathIgnorePatterns": [
       "./build",
       "./node_modules"
     ],
     "transform": {
       "^.+\\.ts?$": "ts-jest"
     }
    }
    
  5. Kita ubah sedikit konfigurasi di tsconfig.json seperti ini.

    "outDir": "./build", 
    "rootDir": "./src",
    
  6. Kita coba bikin file entrypoint nya di src/index.ts seperti ini.

    import express from "express"
    const app = express()
    const port = process.env.PORT || 3000
    export default app
    
  7. Kemudian kita bikin file unit testnya di src/index.unit.test.ts.

    import app from './index'
    import request from 'supertest'  
    describe('Test App', () => {
     it('should run without problem', () => {
         expect(true).toBe(true);
     })
    })
    
  8. Langkah terakhir yaitu kita setting di package.json.

    "scripts": {
     "dev": "tsnd --respawn src/index",
     "build": "tsc",
     "test": "jest",
     "test:watch": "jest --watchAll",
     "test:unit": "jest unit",
     "test:int": "jest int",
     "start": "node build/index"
    },
    
  9. Selesai! Tinggal kita run aja sesuai scriptnya.

Oke setupnya semua udah selesai, disini aku mau jelasin sedikit lagi karena mungkin temen-temen disini ada yang sedikit belum paham. Di langkah ke 3 itu ada beberapa dependency seperti ts-jest, supertest dan ts-node-dev.

  • ts-jest ini disini dibutuhin banget biar kita bisa pakai import statement di file test kita. Kalo kita nggak pakai ini maka setiap kali kita mau pakai module kita perlu pakai require. Saya sendiri lebih suka pakai import ketimbang pakai require.
  • supertest ini diperlukan supaya kita bisa ngetes api (http) kita. Misal kita mau ngetest GET /api/hello maka kita pakai dependency supertest ini.
  • ts-node-dev ini digunakan untuk debug/run file typescript kita secara watch. Maksud watch disini yaitu ketika kita ubah code kita maka secara otomatis server kita akan restart sendiri tanpa perlu kita stop-run manual.

Kemudian di langkah ke 4 itu ada code testPathIgnorePatterns, ini digunakan supaya ketika kita jalankan test, directory build dan node_modules akan diabaikan. Jika tidak maka script test akan menjalankan test yang ada di directory manapun dan kita nggak mau karena kita cuma pingin jalanin test yang ada di folder src dan folder tests.

Jadi itu dia cara setup dan juga sedikit penjelasannya, semoga bermanfaat. Jika dirasa artikel ini bermanfaat jangan lupa di like dan share ya, terimakasih.