Ошибка типа: Не удается прочитать свойство «применить» неопределенного в Express

#express #supertest #express-router

Вопрос:

Я пытаюсь протестировать конечную точку с помощью Супертеста. Я продолжаю получать эту ошибку: «Ошибка типа: Не удается прочитать свойство «применить » неопределенного», и я подозреваю, что это может быть как-то связано с маршрутизатором express. Я буду признателен, если кто-нибудь сможет предложить решение этой проблемы, спасибо.

Тестовый файл

 const request = require('supertest');
const api = require('../../api/api');
const { User } = require('../../api/models/user');

const mongoose = require("mongoose");
jest.setTimeout(10000);

beforeAll(() => {
    require("dotenv").config();

    mongoose.connect(process.env.MONGO_URI_TEST, {
        useFindAndModify: false,
        useUnifiedTopology: true,
        useNewUrlParser: true,
        useCreateIndex: true,
    });
});

describe("User Registration", () => {
    beforeEach(async () => {
        await User.deleteMany({});
    });

    describe("Admin Registration", () => {
        test("response status code is 201", async () => {
            const response = await request(api)
                .post("/auth/registerAdmin")
                .send({
                    username: "Jest Test",
                    firstname: "Jest",
                    lastname: "Test",
                    email: "jesttest@yahoo.com",
                    role: "admin",
                    phoneNumber: "07012345678",
                    password: "2005#KutupA"
                })
                .set('Content-Type', 'application/json');

            expect(response.statusCode).toBe(201);
        });
    });
});
 

Файл маршрутизатора

 const express = require("express"),
    router = express.Router(),
    authController = require("../../controllers/auth/auth");

router
    .route("/registerAdmin")
    .post(
        authController.registerAdmin
    );

module.exports = router;
 

Файл Контроллера

 const UserAuthFunctions = require("../../functions/userAuthFunctions");

exports.registerAdmin = async (err, req, res, next) => {
    UserAuthFunctions.adminRegister(err, req, res, next);
}
 

Файл функций

 const { User } = require("../models/user"),
    mongoose = require("mongoose"),
    argon2 = require("argon2"),
    crypto = require("crypto");

module.exports.adminRegister = async (err, req, res, next) => {
    try {
        const { username, firstname, lastname, email, role, phoneNumber, password } = req.body;

        const user = await User.findOne({
            username: username,
            email: email
        });

        if (user) {
            return res.status(400).json({
                error: "E-Mail Address/Username already registered",
            });
        }

        const hashedPassword = await argon2.hash(password);

        const token = await crypto.randomBytes(16).toString("hex");

        const savedObject = await User.create({
            _id: mongoose.Types.ObjectId(),
            role: role,
            username: username,
            firstname: firstname,
            lastname: lastname,
            email: email,
            phoneNumber: phoneNumber,
            password: hashedPassword,
            confirmationToken: token,
            confirmationTokenExpiration: Date.now()   3600000
        });

        res.status(201).json({
            message: "User successfully added.",
            user: {
                _id: savedObject._id,
                username: savedObject.username,
                email: savedObject.email,
                role: savedObject.role
            },
        });
    } catch (error) {
        res.status(400).json({
            error: "User could not be added, please try again.",
        });
    }
}