Saya mempunyai perisian tengah berikut:
function check(expectedKeys: string[], req: Request): boolean{ if (expectedKeys.length !== Object.keys(req.body).length) return false; for (const key of expectedKeys) { if (!(key in req.body)) return false; } return true; } export default function checkRequestBodyKeys(expectedKeys: string[]) { return (req: Request, res: Response, next: NextFunction) => { const isValid = check(expectedKeys, req); if (isValid) return next(); return res.status(Status.BadRequest).json({status: Status.BadRequest, error: ErrorMessage.InvalidRequestBody}); } }
Saya memanggilnya seperti ini:
import { Router } from "express"; import postAuth from "../controllers/auth.controller"; import checkRequestBodyKeys from "../middlewares/checkRequestBodyKeys.middleware" export const authRoute = Router(); authRoute.post("/", checkRequestBodyKeys(["email", "password"]), postAuth);
Saya ingin menguji sama ada ia mengembalikan nilai yang dijangkakan (parameter res dan seterusnya). Saya tahu bagaimana untuk menguji dan mengejek fungsi middleware mudah, tetapi untuk jenis ini saya tidak tahu bagaimana untuk melaksanakannya.
Saya cuba menulis kod seperti ini tetapi saya tahu ia tidak masuk akal:
describe("validateRequestBody middleware", () => { let mockRequest: Partial<Request>; let mockResponse: Partial<Response>; let nextFunction: NextFunction = jest.fn(); beforeEach(() => { mockRequest = {}; mockResponse = { status: jest.fn().mockReturnThis(), json: jest.fn(), }; }); test('short name should return error', async () => { const expectedResponse = [{error: "Invalid name"}]; mockRequest = { body: { name: "aa", email: "test@yahoo.com", password: "###!!!AAAbbb111222" } } const check = checkRequestBodyKeys( ["name", "email", "password"] ); expect( checkRequestBodyKeys(["name", "email", "password"]) ).toEqual(Function) }); });
Bolehkah sesiapa membantu saya menyelesaikan masalah ini?
checkRequestBodyKeys mengembalikan fungsi yang merupakan middleware sebenar yang digunakan oleh ekspres. Fungsi yang dikembalikan mesti dilaksanakan menggunakan req simulasi, res dan seterusnya. Anda kemudian boleh menyemak sama ada ia, atau fungsi di dalamnya, dipanggil dengan hujah yang anda jangkakan.