У меня есть проект JS, который предоставляет набор конечных точек, использующих Express с типичным шаблоном экспресс / маршрутизатор.
const express = require('express');
const router = new express.Router();
router.post('/', async (req, res, next) => { });
router.get('/:abc', async (req, res, next) => { });
module.exports = router;
Я могу успешно запустить сервер с npm start
, который вызывает node ./src/index.js
и делает конечные точки доступными в https://localhost:8080
Я также могу успешно протестировать эти конечные точки, используя такой инструмент, как Почтальон, или автоматизацию, например, Каратэ.
Проблема, с которой я сталкиваюсь, заключается в том, что я могу Кажется, что при использовании источника с JS по http://localhost: 8080 .
я пробовал npm start
, а затем nyc --all src/**/*.js gradlew test
. Последнее является автоматизацией, которая проверяет конечные точки. Это приводит к 0% покрытию, которое, как я предполагаю, было связано с тем, что ny c не запускался с npm start.
Затем я попробовал nyc --all src/**/*.js npm start
и заметил некоторое покрытие, но это было только покрытие с начала сервер Express.
Затем я попытался nyc --all src/**/*.js npm start
, затем gradlew test
и заметил, что результаты покрытия кода были такими же, как при отсутствии тестов конечной точки.
Далее я попытался поставить предыдущие две команды в один JS сценарий (myscript. js), выполняемый каждой асинхронно, причем сервер Express был запущен до того, как начались тесты gradle и запустились nyc --all src/**/*.js myscript.js
. Результаты этого были такими же, как в моем предыдущем испытании, где только npm start получил покрытие кода.
Затем я попытался nyc --all src/**/*.js npm start
, затем nyc --all src/**/*.js -no-clean gradlew test
и заметил, что результаты покрытия кода были такими же, как когда были запущены тесты конечных точек.
Затем я попробовал все вышеописанные попытки, поместив их в пакет. json Сценарии и запустив npm run <scriptName>
, получив точно такое же поведение.
Наконец я попробовал nyc instrument src instrumented/src --compact=false
, за которым следует npm run start:coverage
, где этот запуск: сценарий покрытия вызывает инструментированный индекс. js в node ./instrumented/src/index.js
, затем gradlew test
, за которым следует nyc report --reporter=lcov
. Эта попытка также не привела к созданию какого-либо дополнительного покрытия кода из тестов конечной точки gradlew.
Проводя некоторые исследования в Интернете, я наткнулся на этот пост Как настроить покрытие кода на моем Express API на основе?
И подумал, что это похоже на мои проблемы. Например, Стамбул не знает, как покрыть код при его использовании через конечные точки.
Я решил все же опубликовать это, так как вышеописанное сообщение довольно старое и хотел бы узнать мнения и посмотреть, есть ли лучшее решение, чем https://github.com/gotwarlost/istanbul-middleware
РЕДАКТИРОВАТЬ
Более подробные сведения о том, как мы запускаем сервер Express и выполняем автоматизацию без Стамбул сегодня. Просто чтобы уточнить, с чем мы работаем, и инструменты автоматизации, в которые мы инвестировали. (В основном, каратэ и Java)
/*
calls --> node -r dotenv/config src/index.js
*/
npm start
/*
calls --> gradlew clean test
this effectively calls a tool called Karate
Karate's base url is pointed to: https://locahost:8080
Karate tests execute endpoints on that base url
This would be akin to using Postman however Karate has quite a bit of configuration options
https://github.com/intuit/karate
*/
npm test