Tutorial jest
Tags: jest, javascript, testing
Published: 2023-12-19 04:57:55

Pertama kita inisialisasi projek dulu dengan perintah `npm init --y`.

### Inisialisasi jest
Selanjutnya kita install jest dengan perintah `npm i jest @types/jest  -D`. Lalu  pada file package.json kita ubah script test dan tambahkan konfigurasi jest.

```json
"scripts": {
    "test": "jest"
  },
"jest": {
    "verbose": true
  },
```

### Melakukan testing
Selanjutnya kita lakukan testing. Kita buat dahulu kode yang akan kita test. Buat file baru `src/sum.js`. Berikut isi filenya.

```js
exports.sum = (a, b) => a + b;

exports.sumAll = (array) => {
  const result = array.reduce((a, b) => a + b, 0);
  return result;
};

```
Kemudian kita tulis kode test-nya. Buat file baru `test/sum.test.js`. Nama file harus berakhiran .test.js.

```js
const { sum, sumAll } = require('../src/sum');

test('should 20', () => {
  const result = sum(10, 10);
  expect(result).toBe(20);
});

test('should 30', () => {
  const result = sumAll([10, 10, 10]);
  expect(result).toBe(30);
});

```
Ada banyak matcher [[doc](https://jestjs.io/docs/expect#matchers)] yang bisa kita gunakan, kali ini kita gunakan matcher toBe.

### Menjalankan testing
Oke kemudian sudah bisa kita jalankan testnya. Bisa kita jalankan dengan perintah `npx jest` atau `npm test`.

### It function
Kita juga bisa menggunakan fungsi it daripada fungsi test agar  lebih enak dibaca.

```js
const { sum, sumAll } = require('../src/sum');

it('should 20', () => {
  const result = sum(10, 10);
  expect(result).toBe(20);
});

it('should 30', () => {
  const result = sumAll([10, 10, 10]);
  expect(result).toBe(30);
});

```

### Coverage
Coverage [[doc](https://jestjs.io/docs/configuration#collectcoverage-boolean)] berfungsi untuk mengetahui seberapa banyak bagian kode kita yang sudah tercover testing-nya. Pada konfigurasi jest di package.json tambahkan beberapa konfigurasi sehingga kodenya

```json
  "jest": {
    "verbose": true,
    "collectCoverage": true,
    "coverageThreshold": {
      "global": {
        "branches": 80,
        "functions": 80,
        "lines": 80,
        "statements": 80
      }
    }
  },
```
Hasil coveragenya bisa dilihat di `coverage/lcov-report/index.html`.

### Express
Untuk melakukan testing dengan jest pada express kita harus install library tambahan `npm i supertest -D`.
Buat file baru `src/index.js`.

```js
const express = require('express');

const app = express();

app.get('/', (req, res) => {
  res.send('Hello world');
});

module.exports = app;

```
Kita buat code testnya

```js
const request = require('supertest');
const app = require('../src/index');

it('should Hello world', async () => {
  const response = await request(app).get('/');
  expect(response.text).toBe('Hello world');
});

```
Kita jalankan lagi testnya `npm test`

### Menggunakan jest bersama eslint
Jika kita menginstall eslint pada projek ini maka akan muncul error pada file test. Untuk mengatasi hal ini kita butuh library tambahan. Kita install librarynya `npm i eslint-plugin-jest  -D`.

Setelah diinstall ubah file .eslintrc.json

```json
{
    "env": {
        "commonjs": true,
        "es2021": true,
        "node": true,
        "jest/globals": true
    },
    "extends": "airbnb-base",
    "parserOptions": {
        "ecmaVersion": "latest"
    },
    "rules": {
        "no-console": "off",
        "linebreak-style": "off"
    },
    "plugins": ["jest"]
}
```


Oke. Itu saja, tutorial kali ini. Sekian terima kasih.