convert-to-jest.js 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. const path = require('path');
  2. const glob = require('glob');
  3. const fs = require('fs-extra');
  4. const utils = require('@jupyterlab/buildutils');
  5. let target = process.argv[2];
  6. if (!target) {
  7. console.error('Specify a target dir');
  8. process.exit(1);
  9. }
  10. if (target.indexOf('test-') !== 0) {
  11. target = 'test-' + target;
  12. }
  13. // Make sure folder exists
  14. const testSrc = path.join(__dirname, target);
  15. console.log(testSrc); // eslint-disable-line
  16. if (!fs.existsSync(testSrc)) {
  17. console.log('bailing'); // eslint-disable-line
  18. process.exit(1);
  19. }
  20. const name = target.replace('test-', '');
  21. // Update the test files
  22. glob.sync(path.join(testSrc, 'src', '**', '*.ts*')).forEach(function(filePath) {
  23. console.log(filePath); // eslint-disable-line
  24. // Convert test files to use jest
  25. let src = fs.readFileSync(filePath, 'utf8');
  26. src = src.split('before(').join('beforeAll(');
  27. src = src.split('context(').join('describe(');
  28. src = src.split('after(').join('afterAll(');
  29. // Use imports from /src
  30. src = src.split(`'@jupyterlab/${name}';`).join(`'@jupyterlab/${name}/src';`);
  31. fs.writeFileSync(filePath, src, 'utf8');
  32. });
  33. // Create jest.config.js.
  34. const jestConfig = `
  35. const func = require('@jupyterlab/testutils/lib/jest-config');
  36. module.exports = func('${name}', __dirname);
  37. `;
  38. fs.writeFileSync(path.join(testSrc, 'jest.config.js'), jestConfig, 'utf8');
  39. // Open coreutils package.json
  40. const coreUtils = path.resolve(__dirname, 'test-coreutils');
  41. const coreUtilsData = require('./test-coreutils/package.json');
  42. // Open target package.json
  43. const targetData = utils.readJSONFile(path.join(testSrc, 'package.json'));
  44. // Assign scripts from coreutils
  45. targetData.scripts = coreUtilsData.scripts;
  46. // Assign dependencies from coreutils
  47. ['jest', 'ts-jest', '@jupyterlab/testutils'].forEach(name => {
  48. targetData.dependencies[name] = coreUtilsData.dependencies[name];
  49. });
  50. // Assign devDependencies from coreutils
  51. targetData.devDependencies = coreUtilsData.devDependencies;
  52. // Write out the package.json file.
  53. utils.writeJSONFile(path.join(testSrc, 'package.json'), targetData);
  54. // Update tsconfig to use jest types.
  55. const tsData = utils.readJSONFile(path.join(testSrc, 'tsconfig.json'));
  56. const index = tsData.compilerOptions.types.indexOf('mocha');
  57. tsData.compilerOptions.types[index] = 'jest';
  58. utils.writeJSONFile(path.join(testSrc, 'tsconfig.json'), tsData);
  59. // Git remove old tests infra
  60. ['karma-cov.conf.js', 'karma.conf.js', 'run-test.py'].forEach(fname => {
  61. utils.run(`git rm -f ./test-${name}/${fname} || true`);
  62. });
  63. // Copy common files from coreutils
  64. ['run.py', 'babel.config.js'].forEach(fname => {
  65. fs.copySync(path.join(coreUtils, fname), path.join(testSrc, fname));
  66. });
  67. // Add new files to git
  68. utils.run(`git add ./test-${name}/run.py ./test-${name}/jest.config.js`);
  69. // Update deps and build test
  70. utils.run('jlpm && jlpm build', { cwd: testSrc });
  71. // Test
  72. utils.run('jlpm test', { cwd: testSrc });