У меня есть проект 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): , , , , , , , , , , , , , , , , , ,
Почему это происходит и как я могу это исправить?