Как я могу протестировать свое экспресс-приложение / набирать текст с помощью мокко? - PullRequest
0 голосов
/ 10 июля 2020

Это мой index.ts

import "reflect-metadata";
import {createConnection, Server} from "typeorm";
import express from "express";
import * as bodyParser from "body-parser";
import routes from "./routes/routes";
import cors from 'cors';

const init = () => createConnection().then( async () => {
    
    const app = express();
    // create express app
    app.use(bodyParser.json());
    app.use(cors());

    // register express routes from defined application routes
    app.use("/", routes);
    app.listen(3000);

    console.log("Express server has started on port 3000.");

    return app;

}).catch(error => console.log(error));

export default init;

И я хочу импортировать init внутри своих тестов,

import chai from 'chai';
import chaiHttp from 'chai-http';

import init from '..';

chai.use(chaiHttp);
chai.should();

let app;

describe("TESTS", () => {
    before(async () => {
        app = await init();
    });

    describe("GET /posts", () => {
        //Test to get all posts
        it("Should get all posts", (done) => {
            chai.request(app)
                .get('/posts')
                .end((err, response) => {
                    response.should.have.status(200);
                    response.body.should.be.a('object');
                    done();
                });
        });
    });
});

Этот код работает, но я хочу разорвать соединение на конец теста с server.close (сервер является возвращаемым объектом app.listen ()) Но я не знаю, как экспортировать этот объект, когда я пробую что-то вроде

return {app: app, server: server}

, я получаю сообщение об ошибке когда я пытаюсь использовать его в своих тестах.

Property 'app' does not exist on type 'void | { app: Express; server: Server; }'.

Я пытаюсь указать возвращаемый тип init (), но получаю ошибки ... Думаю, я не знаю, как это сделать.

1 Ответ

0 голосов
/ 12 июля 2020

Я решил. Спасибо. Если я что-то делаю не так, пожалуйста скажите

...