【问题标题】:How to run unit tests by chunks in karma-webpack?如何在 karma-webpack 中按块运行单元测试?
【发布时间】:2017-12-13 18:38:16
【问题描述】:

我们在项目中使用了以下技术:

angularjs+typescript+webpack+karma+phantomjs

我们在项目中有超过 1000 个单元测试在运行 bu karma-phantomjs-launcher 并且在 Windows 机器上出现幻像崩溃,但以下异常:

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

是否可以将测试拆分为多个块并一个接一个地运行它们?

【问题讨论】:

    标签: webpack phantomjs karma-runner karma-webpack


    【解决方案1】:

    解决方法如下: custom-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

    【讨论】:

      猜你喜欢
      • 2019-06-17
      • 1970-01-01
      • 2015-09-11
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多