run-tests.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /* eslint-disable eslint-comments/disable-enable-pair */
  2. /* eslint-disable @typescript-eslint/no-var-requires */
  3. /* eslint-disable eslint-comments/no-unlimited-disable */
  4. const { spawn } = require('child_process');
  5. // eslint-disable-next-line import/no-extraneous-dependencies
  6. const { kill } = require('cross-port-killer');
  7. const env = Object.create(process.env);
  8. env.BROWSER = 'none';
  9. env.TEST = true;
  10. env.UMI_UI = 'none';
  11. env.PROGRESS = 'none';
  12. // flag to prevent multiple test
  13. let once = false;
  14. const startServer = spawn(/^win/.test(process.platform) ? 'npm.cmd' : 'npm', ['start'], {
  15. env,
  16. });
  17. startServer.stderr.on('data', data => {
  18. // eslint-disable-next-line
  19. });
  20. startServer.on('exit', () => {
  21. kill(process.env.PORT || 8000);
  22. });
  23. startServer.stdout.on('data', data => {
  24. // hack code , wait umi
  25. if (
  26. (!once && data.toString().indexOf('Compiled successfully') >= 0) ||
  27. data.toString().indexOf('Theme generated successfully') >= 0
  28. ) {
  29. // eslint-disable-next-line
  30. once = true;
  31. const testCmd = spawn(
  32. /^win/.test(process.platform) ? 'npm.cmd' : 'npm',
  33. ['test', '--', '--maxWorkers=1', '--runInBand'],
  34. {
  35. stdio: 'inherit',
  36. },
  37. );
  38. testCmd.on('exit', code => {
  39. startServer.kill();
  40. process.exit(code);
  41. });
  42. }
  43. });