You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

35 lines
1.0 KiB

  1. const promisify = require('util').promisify ||
  2. (fn => (...args) => new Promise((resolve, reject) => {
  3. fn(...args, (error, results) => {
  4. if (error) reject(error);
  5. else resolve(results);
  6. })
  7. }));
  8. const fs = require('fs');
  9. const exec = promisify(require('child_process').exec);
  10. const mkdir = promisify(fs.mkdir);
  11. const writeFile = promisify(fs.writeFile);
  12. const assert = require('assert');
  13. const code = `
  14. const update = require('immutability-helper');
  15. const state1 = ['x'];
  16. const state2 = update(state1, {$push: ['y']})
  17. console.log(JSON.stringify(state2));
  18. `
  19. Promise.resolve()
  20. .then(() => mkdir('smoke-test'))
  21. .then(() => process.chdir('smoke-test'))
  22. .then(() => exec('npm init -y'))
  23. .then(() => exec('npm install ../'))
  24. .then(() => writeFile('foo.js', code))
  25. .then(() => exec('node foo'))
  26. .then(result => assert.strictEqual((result.stdout || result).trim(), '["x","y"]'))
  27. .then(() => process.exit(0))
  28. .catch(error => {
  29. console.error('uncaught error', error);
  30. process.exit(1);
  31. });