#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.",
});
}
}