UNPKG

redhot

Version:

TypeScript Monorepo Management

70 lines (52 loc) 1.71 kB
const { join } = require('path') const { readdirSync } = require('fs') const { isDirectory, isInitialized } = require('../util') const Mocha = require('mocha') exports.test = function test (program, config, workingDir) { program .command('test') .option('-o, --only <packageName>', 'Run linting in a single package') .description('Runs tests in all managed packages') .action(options => testLikeABoss(config, workingDir, options)) } function testLikeABoss (config, workingDir, options) { isInitialized(config) const packages = options.only ? config.packages.filter(p => p === options.only) : config.packages if (packages.length === 0) { if (options.only) { return console.log('Cannot find package ' + options.only) } return console.log('Cannot find any packages to test :(') } const tsconfig = require(join(workingDir, 'tsconfig.json')) // this registers how to load .ts files require('ts-node').register(tsconfig) packages.forEach(function (packageName) { const packageDir = join(workingDir, packageName) const testDir = join(packageDir, 'test/') runTests(testDir) }) } function runTests (testDir) { const files = getAllTSFilesInDirectory(testDir) const mocha = new Mocha() files.forEach(function (file) { mocha.addFile(file) }) mocha.run() } function getAllTSFilesInDirectory (dir) { let files = [] readdirSync(dir).filter(function (file) { const abspath = join(dir, file) if (isDirectory(abspath)) { files.push(...getAllTSFilesInDirectory(abspath)) } if (file.substr(-3) === '.ts' || file.substr(-4) === '.tsx') { return files.push(abspath) } }) return files }