2017-12-12 3 views
2

私たちは、私たちのプロジェクトに以下の技術を使用している:karma-webpackでチャンク単位テストを実行するにはどうすればいいですか?

angularjs + typescriptです+ WebPACKの+カルマ+ phantomjs

私たちは、府karma-phantomjs-launcherを実行し、Windowsマシンのファントムにされているプロジェクトでは1000回の以上のユニットテストを持っています

[phantomjs.launcher]: Fatal Windows exception, code 0xc0000005. 

テストをチャンクに分割し、別のチャンクで実行することはできますか?

答えて

3

ソリューションは以下の通りです: カスタムkarma.js

const Server = require('karma').Server; 
const filesFromJson = require('./karma.files.json'); 
const glob = require("glob"); 
const cfg = require('karma/lib/config'); 
const _ = require("lodash"); 
const path = require("path"); 
const minConfig = require('./karma.min.js'); 
const EventEmitter = require('events'); 
class ChunkEmitter extends EventEmitter {} 
const chunkEmitter = new ChunkEmitter(); 

// register karma server and setup listener. 
const registerKarmaServerAndSetListeners = (config, chunkNumber) => { 
    const server = new Server(
     config, 
     () => { 
      console.log('test suite are done' + chunkNumber); 
      // when first chunk of tests is done we have to call another chunk 
      const nextChunk = ++chunkNumber; 
      console.log('proceeding ' + nextChunk); 
      chunkEmitter.emit('chunk' + nextChunk); 
     } 
    ); 
    // listening for server starting event and starting server. 
    chunkEmitter.on('chunk' + chunkNumber,()=> { 
     console.log('staring ' + chunkNumber); 
     server.start(); 
    }); 
} 
const readAllSpecsSplitIntoChunksEmitServer =() => { 
    glob("src/**/*spec.ts", {}, (er, files) => { 
     // spliting all specs into chunks. 
     const chunkedFiles = _.chunk(files, 50); 
     chunkedFiles.forEach((chunk, index) => { 
      let chunkedFiles = filesFromJson.coreFiles.concat(chunk); 
      let karmaConfig = cfg.parseConfig(path.resolve('./karma.config.js'), { 
       files: chunkedFiles 
      }); 
      registerKarmaServerAndSetListeners(karmaConfig, index); 
     }); 
     // starting tests from chunk0 
     chunkEmitter.emit('chunk0'); 
    }) 
} 

readAllSpecsSplitIntoChunksEmitServer(); 

次の実行だけでそれを実行するために:node custom-karma.js

関連する問題