# Tips Mocking Function dengan Jest untuk Pemula

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](https://jestjs.io/) 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.`

```javascript
// 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;
```

```javascript
// 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**

* [https://jestjs.io/docs/mock-function-api](https://jestjs.io/docs/mock-function-api)
