Невозможно настроить Mocha / Chai для тестирования basi c express API - PullRequest
0 голосов
/ 10 июля 2020

Я попытался настроить очень простой express тест API с помощью Mocha.

let chai = require("chai");
let chaiHttp = require("chai-http");

chai.use(chaiHttp);

describe("TicketBooking", function(){
    describe ("CRUD OPERATIONS", function(){
        var seats = [{
            "seatID": 12,
            "passenger": {
                "name": "Mr. a Huffle Puff",
                "sex": "M",
                "age": 52,
                "email": "karafasfaa@gmail.com"
            }
        }, {
            "seatID": 19,
            "passenger": {
                "name": "Mr. a Huffle Puff",
                "sex": "M",
                "age": 52,
                "email": "karafafasfssfaa@gmail.com"
            }
        }]

        it("Should create seats in DB", (done) => {
            for (var i=0; i<seats.length; i++) {
                console.log(seats[i])
                chai.request('http://localhost:5141')
                    .post("/create/")
                    .send(seats[i])
                    .end((err, res) => {
                        chai.expect(res).to.have.status(200);
                        console.log("Response Body:", res.body);
                        done();
                    })
            }
        })
    })
})

Хотя мой сервер работает при вызове через почтальона, я не могу настроить для него тесты Mocha.

Мой express маршрутизатор для enpoint '/ create' настроен как:

//MODULE IMPORTS
const express = require('express')

//MODEL IMPORTS
const { Ticket } = require('../models/ticket')
const { Passenger } = require('../models/passenger');

//ROUTER OBJECT INIT
const router = express.Router();

//CREATE A TICKET {POST}
router.post('/create', async (req, res) => {
    data = await req.body
    try { 
        for(var i=0; i< data.length; i++) {
            obj = data[i]
            try {
                //Check if seatID is valid
                if (parseInt(obj.seatID) > 40) {
                    return res.status(400).send("Invalid SeatID. There are only 40 seats in the Bus!");
                }

                //Check if seat is already booked.
                let exists = await Ticket.findOne({
                    isBooked: true,
                    seatID: obj.seatID
                });
                
                if (exists) {
                    return res.status(400).send("The seat you are looking for is already booked");
                }
                //Save Passenger to Atlas Cluster
                const passenger = new Passenger(obj.passenger);
                const passengerData = await passenger.save();

                if (passengerData) {
                    //If passenger was saved, save a ticket entry, corresponding to the passenger
                    const ticket = new Ticket()
                    ticket.seatID = obj.seatID
                    ticket.isBooked = true
                    ticket.passengerObj = passenger._id;
                    const ticketData = await ticket.save();
                    if (ticketData) {
                        res.status(200).send(ticketData);
                    }
                }

            } catch (err) {
                // console.log("ERROR:: ", err)
                return res.status(403).send(err);
            }
        }
        
    } catch (err) {
        console.log("ERROR:: ", err)
        return res.status(403).send(err);
    }
});

Я получаю следующую ошибку: введите описание изображения здесь

Что-то не так с моей настройкой? Я пытался отладить это часами, но не могу понять. Кто-нибудь может мне помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...