Самое близкое, что я нашел здесь, - это karma-typescript не может найти модуль, но он ссылается к проблеме, когда karma-typescript не может найти исходный файл, не являющийся зависимостью. Его решение все равно не сработало.
Я пытаюсь настроить модульное тестирование для проекта TypeScript с использованием Karma, Mocha и Chai. Я решил использовать пакет karma-typescript в npm, чтобы настроить свои тесты, чтобы им не пришлось сначала компилировать в Javascript. Когда я запускаю 'karma start karma.conf.js', он работает некоторое время, а затем возвращает:
02 03 2019 14:08:28.791:DEBUG [coverage.karma-typescript]: Initializing
02 03 2019 14:08:28.799:DEBUG [compiler.karma-typescript]: Setting up deferred project compilation
02 03 2019 14:08:28.800:DEBUG [coverage.karma-typescript]: Configuring coverage preprocessor
02 03 2019 14:08:28.805:ERROR [karma-server]: Server start failed on port 9876: Error: Cannot find module 'readable-stream/duplex.js'
npm ERR! Test failed. See above for more details.
Я попытался вручную добавить читаемый поток, хотя читаемый поток находится в пакете karma-typescript package.json, но, похоже, он не делает ничего другого. Я настроил karma.conf.js так:
const puppeteer = require('puppeteer');
process.env.CHROME_BIN = puppeteer.executablePath();
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['mocha', 'chai', 'karma-typescript'],
karmaTypescriptConfig: {
compilerOptions: {
module: "commonjs"
},
tsconfig: "./src/ts/tsconfig.json"
},
files: [
'src/**/*.ts'
],
exclude: [
],
preprocessors: {
"**/*.ts": ["karma-typescript"]
},
reporters: ['progress', 'karma-typescript'],
port: 9876,
colors: true,
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_DEBUG,
autoWatch: false,
browsers: ['ChromeHeadless'],
singleRun: true,
concurrency: Infinity
})
}
Мой tsconfig.json выглядит так и хранится в той же папке, что и все исходные файлы .ts (src / ts /):
{
"compilerOptions": {
"target": "es2018",
"outDir": "../js",
"rootDir": "./",
"strict": true,
"moduleResolution": "node",
"esModuleInterop": true
}
}