【问题标题】:Testacular/Karma: how to reuse browser's tab?Testacular/Karma:如何重用浏览器的标签?
【发布时间】:2020-09-27 18:41:46
【问题描述】:

每次我重新运行 Karma 时,它都会打开一个新的 Chrome 窗口,尽管屏幕上已经有一个并且其中的 URL 相同。

如何让 Karma runner 重复使用浏览器窗口以及是否打开了相应的选项卡 - 重复使用此选项卡?

【问题讨论】:

    标签: browser karma-runner


    【解决方案1】:

    在配置中,设置

    browsers = [];
    

    【讨论】:

    • 它完全停止打开任何浏览器。
    • 它应该打印出如下消息:Karma running at localhost:9876。使用您想要的任何浏览器打开它,然后保持该选项卡处于打开状态以重复使用它。
    • 这不是一个有效的答案,这将导致根本不打开浏览器,这是 OP 问题。
    【解决方案2】:

    我来到这里是在不同的背景下寻找相同的问题。

    在运行测试时,有些情况下 Karma 会立即打开 2 个选项卡,因此所有测试都会运行两次。通常这不应该是一个问题,但在我们的例子中会导致一些意外的延迟和零星的故障。

    确实,为了防止这种不良行为,应该在 Karma 配置中添加以下内容:

    restartOnFileChange: true
    

    根据 Karma 的规范,这会迫使跑步者停止当前执行并开始新的执行,从而有效地重复使用相同的当前选项卡。

    默认行为 restartOnFileChange: false 会导致在当前执行继续运行时开始新的执行,从而有效地生成 2 个同时运行的选项卡。

    【讨论】:

      【解决方案3】:

      在 config.set({...}) 块内添加以下行:

          restartOnFileChange: false,
      

      这是保证。

      使用该行,每当您保存文件时,浏览器都会自动刷新自身而不是重新打开

      以防万一,下面是我完整的karma.conf.js文件,效率很高:

      // Karma configuration file, see link for more information
      // https://karma-runner.github.io/1.0/config/configuration-file.html
      
      module.exports = function (config) {
          config.set({
              basePath: '',
              frameworks: ['jasmine', '@angular-devkit/build-angular'],
              plugins: [
                  require('karma-jasmine'),
                  require('karma-chrome-launcher'),
                  require('karma-jasmine-html-reporter'),
                  require('karma-coverage-istanbul-reporter'),
                  require('@angular-devkit/build-angular/plugins/karma')
              ],
              client: {
                jasmine: {
                  random: false
                },
                clearContext: false // leave Jasmine Spec Runner output visible in browser
              },
              coverageIstanbulReporter: {
                  dir: require('path').join(__dirname, 'coverage'),
                  reports: ['html', 'lcovonly', 'text-summary'],
                  fixWebpackSourcePaths: true
              },
              reporters: ['progress', 'kjhtml'],
              port: 9876,
              colors: true,
              logLevel: config.LOG_INFO,
              autoWatch: true,
              browsers: ['Chrome'],
              singleRun: false,
              restartOnFileChange: false,
          });
      };
      

      在块中,我自己添加了以下内容:

            jasmine: {
              random: false
            },
      

      这使您的“it”块按照与您的规范文件中相同的顺序显示;

            restartOnFileChange: false,
      

      谁的功能是你想要的,我已经在上面提到了。

      您可以在项目的 src/coverage/index.html 中打开代码覆盖率文件。

      注意:有时 chrome 在您保存文件后不会自动刷新。您只需手动刷新它,整个测试就会重新开始。很简单。

      【讨论】:

      • 我从您的回答中推测您的意思是:restartOnFileChange: true 实际上,无论如何,添加我自己的答案以使事情变得清晰。
      • 嗨 GullerYA,不,我的意思是“restartOnFileChange: false”,而不是“restartOnFileChange: true”。
      • 好吧,抱歉,可能我的用例不同,或者我的体验不同,但是:(A) false 是根据 Karma 规范的默认值; (B) 当true 时,它将停止当前执行并重新开始,逻辑上并根据规范。第二点确保上一次运行不会继续在其他选项卡中运行,同时打开新选项卡,但会强制关闭当前选项卡并重新开始 - 恕我直言,问题的用例.
      • 我在帖子中清楚地说明了这句话的目的。实际上,以防万一出现任何问题,我包含了整个 karma.conf.js 文件。我已经用上面显示的 karma.conf.js 测试了很多组件,一切都很顺利。
      猜你喜欢
      • 2013-04-01
      • 2019-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 2017-04-18
      • 1970-01-01
      • 2018-10-05
      相关资源
      最近更新 更多