/tools/test-engine/testRunner.js

https://github.com/pnp/generator-spfx · JavaScript · 140 lines · 85 code · 34 blank · 21 comment · 5 complexity · 8ce4692c736fc9d1da96bc87c6b027db MD5 · raw file

  1. class TestRunner {
  2. constructor() {};
  3. run(testSuite) {
  4. /**
  5. * File System Helpers
  6. */
  7. // const fs = require('fs');
  8. const path = require('path');
  9. // const rimraf = require('rimraf');
  10. // const EventEmitter = require('events');
  11. /**
  12. * Helpers yeoman test suite
  13. */
  14. // let helpers = require('yeoman-test');
  15. let assert = require('yeoman-assert');
  16. /**
  17. * Test folder setup
  18. */
  19. const tempDir = path.join(__dirname, '../../testresult/');
  20. /**
  21. * Clean up test definitions form require cache
  22. */
  23. const clearYeomanCache = () => {
  24. Object.keys(require.cache).forEach(function (key) {
  25. if (key.indexOf("yeoman-test") !== -1 ||
  26. key.indexOf("yeoman-assert") !== -1 ||
  27. key.indexOf("@microsoft") !== -1) {
  28. try {
  29. delete require.cache[key];
  30. } catch (error) {
  31. console.log(error);
  32. }
  33. }
  34. });
  35. }
  36. // Run all Tests sequential
  37. let testSuiteName =
  38. `\n\tTest Suite: ${testSuite.name},
  39. \tFramework: ${testSuite.framework},
  40. \tEnvironment: ${testSuite.environment},
  41. \tComponent: ${testSuite.component.componentType} ${testSuite.component.componentType == "extension" ? testSuite.component.extensionType : ''}`;
  42. testSuite.definitions.forEach(definition => {
  43. let detailedTestSuiteName = `${testSuiteName}\n\tOptions:${definition.name}`;
  44. describe(detailedTestSuiteName, (done) => {
  45. let userWebPartConfig = {
  46. componentDescription: 'HelloWorld',
  47. componentName: 'helloworld',
  48. solutionName: 'HelloWorld',
  49. environment: testSuite.environment,
  50. skipVersionCheck: true,
  51. testRun: true
  52. };
  53. if (testSuite.component !== undefined) {
  54. Object.keys(testSuite.component)
  55. .forEach(key => {
  56. userWebPartConfig[key] = testSuite.component[key];
  57. });
  58. } else {
  59. userWebPartConfig.componentType = 'webpart';
  60. }
  61. let baseSettings = {
  62. framework: testSuite.framework,
  63. }
  64. /**
  65. * Test Bench
  66. */
  67. let TestBench = require('./testbench');
  68. let userTestConfig = Object.assign({}, baseSettings, definition.specifics);
  69. let yoTestBench = new TestBench(userWebPartConfig, userTestConfig);
  70. before((done) => {
  71. yoTestBench.run()
  72. .catch(() => {
  73. reject();
  74. })
  75. .then(() => {
  76. clearYeomanCache();
  77. done();
  78. })
  79. // })
  80. })
  81. definition.test.forEach(test => {
  82. it(test.name, () => {
  83. let filePath = path.resolve(tempDir, test.file);
  84. switch (test.type) {
  85. case yoTestBench.types.fileContent:
  86. assert.fileContent(filePath, test.expr);
  87. break;
  88. case yoTestBench.types.noFileContent:
  89. assert.noFileContent(filePath, test.expr);
  90. break;
  91. case yoTestBench.types.file:
  92. assert.file(filePath);
  93. break;
  94. case yoTestBench.types.noFile:
  95. assert.noFile(filePath);
  96. break;
  97. default:
  98. break;
  99. }
  100. })
  101. })
  102. });
  103. })
  104. }
  105. }
  106. module.exports = TestRunner;