@ hapi / lab with lab-transform-typcript возвращает результаты покрытия кода с ошибками - PullRequest
0 голосов
/ 31 марта 2020

У меня есть проект Hapi JS на TypeScript, и я хотел начать добавлять некоторые модульные тесты. На данный момент код очень прост:

server.ts

import * as Hapi from "@hapi/hapi";
import routes from "./routes";

const server = new Hapi.Server({
    port: 80,
    host: "0.0.0.0",
    debug: {
        request: ["error"]
    }
});

let serverSetup = false;

const setupServer = async () =>
{
    if (serverSetup) return;

    await server.register([routes]);

    serverSetup = true;
};

export const init = async () =>
{
    await setupServer();
    await server.initialize();
    return server;
};

export const start = async () =>
{
    await setupServer();
    await server.start();
    console.log(`Server running at: ${server.info.uri}`);
    return server;
};

rout.ts :

import * as Hapi from "@hapi/hapi";

export default {
    name: "RouteIndex",
    version: "1.0.0",
    register: function (server:Hapi.Server, options:Hapi.ServerRegisterOptions)
    {

        server.route({
            method: "GET",
            path: "/",
            handler: (request, h) =>
            {
                return {message: "Hello, World!"};
            }
        });

        server.route({
            method: "*",
            path: "/{any*}",
            handler: (request, h) =>
            {
                return "404!";
            }
        });

    }
};

Затем мой модульный тест:

server.test. js

const Lab = require("@hapi/lab");
const { expect } = require("@hapi/code");
const { afterEach, beforeEach, describe, it } = exports.lab = Lab.script();
const { init, start } = require("../src/server");

const HTTP_PORT = 80;
const HTTP_STATUS_OK = 200;

describe("General Server Tests", () =>
{
    let server;

    beforeEach(async () =>
    {
        server = await init();
    });

    afterEach(async () =>
    {
        await server.stop();
    });

    it("Starts successfully", async () =>
    {
        server = await start();
        expect(server.type).to.equal("tcp");
        expect(server.settings.port).to.equal(HTTP_PORT);
        expect(server.settings.host).to.equal("0.0.0.0");
    });

    it("Responds to GET requests", async () =>
    {
        const res = await server.inject({
            method: "GET",
            url: "/"
        });
        expect(res.statusCode).to.equal(HTTP_STATUS_OK);
    });
});

Для запуска моих тестов в моем пакете есть следующее. json:

{
    // ...
    "scripts": {
        // ...
        "test": "lab -vclS -T node_modules/lab-transform-typescript **/*.test.js",
        // ...
    }
    // ...
}
  • Добавлен флаг -v, потому что я предпочитаю подробный вывод
  • Добавлен флаг -c, чтобы я мог получить отчет о покрытии кода, и вот где моя проблема заключается в
  • Необходимо добавить флаг -l, потому что в противном случае я получаю ошибку: The following leaks were detected:__extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator,... (все глобальные переменные, созданные компилятором TypeScript)
  • Флаг -S был добавлено в документацию lab-transform-typcript (-S == --sourcemaps)
  • Флаг -T предназначен для загрузки lab-transform-typescript (-T == --transform)

Когда я запускал тесты, это был результат:

stevenbarnett@MacBook-Pro hapi-test % npm run test

> hapi-test@1.0.0 test /Users/stevenbarnett/Repos/hapi-test
> lab -vclS -T node_modules/lab-transform-typescript **/*.test.js

Server running at: http://0.0.0.0:80
General Server Tests
  ✔ 1) Starts successfully (4 ms)
  ✔ 2) Responds to GET requests (7 ms)


3 tests complete
Test duration: 111 ms
Coverage: 71.50% (61/214)
src/server.ts missing coverage from file(s):
        null on line(s): , , , , , , , , , , , , , , , , , , 
src/routes.ts missing coverage from file(s):
        null on line(s): , , , , , , , , , , , , , , , , , , , , , 
        src/routes/index.ts on line(s): 24

Таким образом, я получаю, что src/routes/index.ts отсутствовал охват в строке 24 (это ошибка 404, и я не проверял на 404) - но другие строки не ensical:

  • null on line(s): , , , , , , , , , , , , , , , , , ,

Почему это происходит и как я могу это исправить?

...