Mocking Function with Jest

Masih bingung cara melakukan mocking function di Jest? Berikut contoh kodenya.

Tetsing adalah salah satu bagian penting dalam men-develop sebuah program, yang bertujuan untuk memastikan program yang kita develop sesuai yang kita harapkan.

Namun ketika program yang kita develop terintergarsi dengan third party services seperti social login, cek ongkir, dll, terkdangan proses testing menjadi sesuatu yang tricky.

Terkadang me-mocking sebuah function yang terintegrasi dengan third party services diperlukan didalam sebuah testing guna mempercepat proses testing itu sendiri.

Berikut adalah sample code mocking menggunakan jest yang bisa teman-teman gunakan untuk menguji/testing sebuah function yang terintegrasi dengan third party services.

Saya asumsikan teman-teman sudah familiar dengan basic testing di jest.

// User.js
const db = require("./dbconfig"); // your db config

class User {
    static create = async (payload) => {
        try {
            return await db.create(payload);
        } catch (err) {
            throw err;
        }
    };

    static findAll = async () => {
        try {
            return await db.findAll();
        } catch (err) {
            throw err;
        }
    };

    static deleteAll = async () => {
        try {
            return await db.deleteAll();
        } catch (err) {
            throw err;
        }
    };
}

modul.exports = User;
// user.test.js
const User = require("./User");
const app = require("./app");
const request = require("supertest");

describe("Testing user", () => {
    beforeAll(async () => {
        await User.create({
            username: "udin",
            email: "udin@mail.com",
        });
    });

    beforeEach(() => {
        jest.restoreAllMocks();
    });

    afterAll(async () => {
        await User.deleteAll();
    });

    it("Should be return error when hit findAll", (done) => {
    jest.spyOn(User, "findAll").mockRejectedValue("Error"); // you can pass your value as arg
        // or => User.findAll = jest.fn().mockRejectedValue('Error')
        request(app)
            .get("/users")
            .then((res) => {
        // expect your response here
                expect(res.status).toBe(500);
                expect(res.body).toBe("Error");
                done();
            })
            .catch((err) => {
                done(err);
            });
    });
});

Sumber