Home Reference Source Test

test/index.js

  1. import PuppeteerBrowser from '../source/index';
  2.  
  3. import { equal, notEqual } from 'should';
  4.  
  5. import { spy } from 'sinon';
  6.  
  7. import desktopEnv from 'desktop-env';
  8.  
  9. import activeWin from 'active-win';
  10.  
  11. import processOf from 'find-process';
  12.  
  13. import promisify from 'promisify-node';
  14.  
  15. const { mkdir, writeFile, appendFile, unlink, rmdir } = promisify('fs');
  16.  
  17.  
  18. function wait(second) {
  19.  
  20. return new Promise(resolve => setTimeout(resolve, second * 1000));
  21. }
  22.  
  23. async function isActiveWindow(page, yes = true) {
  24.  
  25. const assert = yes ? equal : notEqual;
  26.  
  27. const window = await activeWin(), path = PuppeteerBrowser.executablePath();
  28.  
  29. if ( window.owner.path )
  30. assert(path, window.owner.path);
  31. else
  32. assert(path.match( /([^/]+)(\.\w+)?$/ )[1], window.owner.name);
  33. }
  34.  
  35.  
  36. describe('Static methods', () => {
  37.  
  38. const file = 'test/example/test.js'; var GUI;
  39.  
  40. before(async () => {
  41.  
  42. await mkdir('test/example');
  43.  
  44. GUI = ('N/A' !== await desktopEnv());
  45. });
  46.  
  47. /**
  48. * @test {PuppeteerBrowser.watch}
  49. */
  50. it('Watch files changing', async () => {
  51.  
  52. const onChange = spy();
  53.  
  54. await writeFile(file, '');
  55.  
  56. PuppeteerBrowser.watch('test/example/', onChange);
  57.  
  58. await wait( 1 );
  59.  
  60. await appendFile(file, 'test');
  61.  
  62. await wait( 1 );
  63.  
  64. onChange.should.be.calledOnce();
  65. });
  66.  
  67. /**
  68. * @test {PuppeteerBrowser.getBrowser}
  69. * @test {PuppeteerBrowser.getPage}
  70. */
  71. it('Open a background page', async () => {
  72.  
  73. const page = await PuppeteerBrowser.getPage('docs/');
  74.  
  75. const browser = await PuppeteerBrowser.getBrowser();
  76.  
  77. const task = await processOf('pid', browser.process().pid);
  78.  
  79. if (! process.env.npm_lifecycle_script.includes('--inspect'))
  80. task[0].cmd.should.containEql('--headless');
  81.  
  82. if ( GUI ) await isActiveWindow(page, false);
  83.  
  84. await browser.close();
  85. });
  86.  
  87. /**
  88. * @test {PuppeteerBrowser.getPage}
  89. */
  90. it('Open a preview page', async () => {
  91.  
  92. if (! GUI)
  93. return console.info(
  94. 'Can\'t test Browser window without Desktop environment'
  95. );
  96.  
  97. const page = await PuppeteerBrowser.getPage('docs/', null, () => { });
  98.  
  99. await isActiveWindow( page );
  100.  
  101. await page.browser().close();
  102. });
  103.  
  104.  
  105. after(async () => {
  106.  
  107. await unlink( file );
  108.  
  109. await rmdir('test/example');
  110. });
  111. });