【问题标题】:How do I run only certain tests in karma?我如何在业力中只运行某些测试?
【发布时间】:2014-12-23 13:35:58
【问题描述】:

我已经正确设置了业力配置,配置文件,在后台运行,非常棒。一旦我更改并保存文件,它就会重新运行测试......所有 750 个单元测试。我希望能够运行一些。除了手动修改配置文件或注释掉多个文件中的数百个测试,有什么简单的方法吗?

例如当使用 mocha 运行命令行服务器测试时,我只使用正则表达式:mocha -g 'only tests that I want'。使调试和快速检查变得更加容易。

【问题讨论】:

    标签: karma-runner karma-mocha


    【解决方案1】:

    有不同的方法来做到这一点。

    1. 使用--grep 选项。这样做的缺点是所有测试都在运行特定的测试套件之前进行了预处理。

    2. 使用.only 方法。缺点和没有一样。 1. 使用 1 和 2 方法,我的节点进程经常崩溃,经常说内存不足。

    3. 限制要处理的文件选项。这速度超级快。

    将预处理限制为特定文件夹,例如 Unit 或 Integration 文件夹。 为此,我使用了自定义 cli 选项 --only 并在 karma 配置中

    const modules = config.only;
    

    在文件模式中

    files: typeof modules === 'string ? '[`tests/**/${module}/**/*.(test|spec).js`]: 'tests/**/*.(test|spec).js'
    

    优点:开发人员通过在预处理阶段进行限制,可以更快地进行小改动时,只能运行某些测试。

    您也可以使用 no.3 和 no.1 或 2 的组合。

    【讨论】:

      【解决方案2】:

      1) 在您的 karma.conf.js 中从终端获取参数:

      var files = (process.env.npm_config_single_file) ? process.env.npm_config_single_file : 'test/test_index.js';
      

      2) 为了运行单个测试,您需要使用所有配置设置一个选项对象(不包括文件和预处理器):

      var option = {
      
        webpack: {
          // webpack configuration
        },
      
        // more configuration......
      };
      

      3) 设置文件路径和预处理器:

        option.files = [
            {pattern: files, watch: false}
        ];
      
        option.preprocessors = {};
      
        option.preprocessors[files] = [ 'webpack', 'sourcemap' ];
      
        // call config.set function
        config.set(option);
      

      4) 在终端中运行:

      npm test --single_file=**/my-specific-file-spec.js
      

      有关更多信息,请查看此 PR: https://github.com/webpack/karma-webpack/pull/178

      【讨论】:

        【解决方案3】:

        在这里可以提供帮助的一个不错的扩展是 karma-jasmine-html-reporter-livereload https://www.npmjs.com/package/karma-jasmine-html-reporter-livereload

        或 karma-jasmine-html-reporter https://www.npmjs.com/package/karma-jasmine-html-reporter?__hstc=72727564.86845f057bb4d741f59d578059e30644.1443860954685.1453095135802.1453138187458.37&__hssc=72727564.1.1453138187458&__hsfp=2285154675

        它会创建一个调试页面,您可以在其中单独运行每个测试。对于大型项目非常有用!

        【讨论】:

        • 呃,我没看到。所以不是自动重新运行所有测试,而是在调试页面选择它们?
        • 如果你保留 Karma 的 singlerun: false 你可以运行单独的测试
        【解决方案4】:

        我有同样的问题,这是我对 karma.conf.js 稍作改动的解决方法。 实际上,从命令行获取一个参数并修改“文件”中的模式。 我使用minimist 来解析参数列表。

        在配置文件中:

        /* Begin */
        var minimist = require('minimist');
        var argv = minimist(process.argv);
        var testBase="test/unit";
        var testExt=".spec.js";
        var unitTestPattern = testBase+'/**/*'+testExt;
        if ("test" in argv){
          unitTestPattern = testBase+"/"+argv["test"]+testExt;
        }
        /* End */
        module.exports = function(config){
          config.set({
            //....
        
            files : [
            //....
              unitTestPattern,             //place here
        //      'test/unit/**/*.spec.js',  //replace this
            //....
            ],
            //....
        
          });
        };
        

        在命令提示符下运行:

        karma start test/karma.conf.js --single-run  --test #TEST_CASE_FILE#
        

        【讨论】:

          【解决方案5】:

          所以现在我觉得自己很愚蠢。 mocha 支持非常窄的正则表达式匹配。

          这会运行所有测试

          describe('all tests',function(){
             describe('first tests',function(){
             });
             describe('second tests',function(){
             });
          });
          

          这只是运行“第一次测试”

          describe('all tests',function(){
             describe.only('first tests',function(){
             });
             describe('second tests',function(){
             });
          });
          

          你也可以it.only()

          我应该注意到这一点。叹息。

          【讨论】:

          • 这限制了对特定测试或套件的执行。我以为您想按关键字执行它们。无论如何,很高兴您找到了适合您需求的解决方案。
          • 我试图限制特定的测试或套件。我认为做到这一点的唯一方法是“宏观”方法,如 CLI,但不知何故实时注入业力。我没想过从下往上走微观。这非常有效。
          【解决方案6】:

          不幸的是,您可以在 karma 启动时执行此操作,而不是在运行时执行此操作。 如果你想动态改变它,你必须付出更多的努力。

          假设您想从一开始就专注于特定的测试集/套件,在 karma-mocha plugin page 上,有这个 sn-p 代码可以做您想做的事情:

          module.exports = function(config) {
            config.set({
              // karma configuration here
              ...
          
              // this is a mocha configuration object
              client: {
                // The pattern string will be passed to mocha
                args: ['--grep', '<pattern>'],
                ...
              }
            });
          };
          

          为了使 &lt;pattern&gt; 参数化,您必须将配置文件包装在 Configurator 中,该配置文件将侦听 CLI 并为您自定义业力配置。

          看看this SO answer 了解如何设置一个非常简单的配置器。

          【讨论】:

          • 谢谢。我读过它,但即使这也取决于评论行。当我运行命令行测试时,这很好;我只是做mocha -g 'some expression'。但是 karma 需要一些时间来启动并自动重新运行。我希望能够有一些文件,我可以在其中包含我刚刚更改它的位置,它会自动拾取它。有什么想法吗?
          猜你喜欢
          • 2014-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-20
          • 2022-10-01
          • 2020-04-12
          相关资源
          最近更新 更多