Billie/storage/projects/asynchronous-programming/tests-backup2/unit/modul1-unit.test.js
2025-05-14 09:03:05 +07:00

104 lines
3.1 KiB
JavaScript

const mongoose = require("mongoose");
const connectDB = require("../../src/config/database");
const errorHandler = require("../../src/middleware/errorHandler");
const mockRequest = (body = {}, params = {}) => ({
body,
params,
});
const mockResponse = () => {
const res = {};
res.status = jest.fn().mockReturnValue(res);
res.json = jest.fn().mockReturnValue(res);
return res;
};
describe("Modul 1 - Unit Tests", () => {
beforeEach(() => {
jest.clearAllMocks();
console.error = jest.fn();
});
describe("Error Handler Middleware", () => {
test("harus menangani error dengan status code yang disediakan", () => {
const err = new Error("Bad Request Error");
err.statusCode = 400;
const req = mockRequest();
const res = mockResponse();
const next = jest.fn();
errorHandler(err, req, res, next);
expect(console.error).toHaveBeenCalled();
expect(res.status).toHaveBeenCalledWith(400);
expect(res.json).toHaveBeenCalledWith({
success: false,
error: "Bad Request Error",
});
});
test("harus menggunakan default status code 500 jika tidak disediakan", () => {
const err = new Error("Server Error Without Status Code");
const req = mockRequest();
const res = mockResponse();
const next = jest.fn();
errorHandler(err, req, res, next);
expect(console.error).toHaveBeenCalled();
expect(res.status).toHaveBeenCalledWith(500);
expect(res.json).toHaveBeenCalledWith({
success: false,
error: "Server Error Without Status Code",
});
});
});
describe("Custom Error Creation", () => {
test("harus dapat membuat custom error dengan status code", () => {
const createCustomError = (message, statusCode) => {
const error = new Error(message);
error.statusCode = statusCode;
return error;
};
const notFoundError = createCustomError("Resource not found", 404);
const validationError = createCustomError("Validation failed", 400);
expect(notFoundError).toBeInstanceOf(Error);
expect(notFoundError.message).toBe("Resource not found");
expect(notFoundError.statusCode).toBe(404);
expect(validationError).toBeInstanceOf(Error);
expect(validationError.message).toBe("Validation failed");
expect(validationError.statusCode).toBe(400);
});
test("harus dapat meneruskan error ke middleware error handler", () => {
const err = new Error("Test Error");
err.statusCode = 422;
const req = mockRequest();
const res = mockResponse();
const next = jest.fn();
next(err);
errorHandler(err, req, res, next);
expect(next).toHaveBeenCalledWith(err);
expect(res.status).toHaveBeenCalledWith(422);
expect(res.json).toHaveBeenCalledWith({
success: false,
error: "Test Error",
});
});
});
describe("Express Middleware Structure", () => {
test("harus memiliki struktur errorHandler yang benar", () => {
expect(errorHandler).toBeInstanceOf(Function);
expect(errorHandler.length).toBe(4);
});
});
});