【问题标题】:Karma Disconnected, because no message in 10000 msKarma 已断开连接,因为 10000 毫秒内没有消息
【发布时间】:2019-07-11 16:16:26
【问题描述】:

Karma 测试套件失败并显示以下消息:

已断开连接,因为 10000 毫秒内没有消息。

根本不执行任何测试。

"@angular/core": "7.1.3",
"jasmine-core": "3.3.0",
"karma-jasmine": "1.1.2",

没有明显的失败原因,它只是在引入新测试后才开始。

【问题讨论】:

    标签: angular typescript jasmine karma-runner typescript-namespace


    【解决方案1】:

    tsconfig.spec.json 中 TypeScript 的 --module 编译器选项设置为 commonjs 时,Karma 在执行任何测试之前内部失败并显示上述超时错误。

    导入排序会让 Karma 失败:

    import CustomerTypeEnum = CustomerDto.CustomerTypeEnum;
    import {CustomerDto} from '../api/CustomerDto';
    

    虽然此订单按预期工作:

    import {CustomerDto} from '../api/CustomerDto';
    import CustomerTypeEnum = CustomerDto.CustomerTypeEnum;
    

    也可以通过将模块编译器选项更改为例如es2015.

    【讨论】:

    • 没有。这根本不是一个错误。 import CustomerTypeEnum = CustomerDto.CustomerTypeEnum; 根本不是导入。它是一种为 TypeScript 命名空间的成员起别名的语法。这样的命名空间可以存在于值空间和类型空间中。由于CustomerTypeEnum 既是值又是类型,因此编译器发出变量赋值,并带有一个引用尚未定义的对象的属性的初始化程序。这在某种程度上取决于您的输出模块格式。查看实际编译的代码,您将确切了解发生了什么以及原因。
    • TypeScript 编译器可能应该将此标记为错误,但它只会在某些模块格式中失败。
    • 感谢您的输入,我根据您的输入调整了答案。我同意 TypeScript 编译器应该将此标记为错误或至少给出警告。
    • 实际上与--moduleResolution--target无关,而是与--module有关。但是基于该标志的可能差异实际上是一个附带问题。最终,您所做的是在值可用之前使用该值,编译器应该警告您,但有效的顺序也是逻辑顺序 - 如果没有其他原因,导入应该在使用之前在词法上进行。
    • 再次更改了答案:实际上将 --modulecommonjs 更改为 es2015 在我的代码库中工作,并且绝对是更好的解决方案。
    【解决方案2】:

    您可以在需要比茉莉花默认时间更长的时间添加它。

      beforeEach(async(() => {
        jasmine.DEFAULT_TIMEOUT_INTERVAL = <whatever time your test need to complete>;
      }));
    

    如果这不起作用,您也可以检查此答案。 https://stackoverflow.com/a/37969873/1931563

    【讨论】:

    • 已经试过了,在我的情况下不起作用。它在业力初始化期间失败(请参阅下面的答案)。
    • 是的,我有,这绝对不是时间问题。我花了一整天的时间才弄明白,因为 Karma 没有报告编译器问题。将 commonjs 模块 compilerOption 更改为 es2015 即可解决问题。
    • 我不这么认为它的 DEFAULT_TIMEOUT_INTERVAL 问题。因为有时我看到即使我的测试用例甚至还没有开始运行,并且在 karma 启动器之后我看到了断开连接的问题。
    【解决方案3】:

    我遇到了同样的问题并尝试了所有方法 - 除了将此选项添加到我的 karma.conf.js 之外,没有任何效果:

    browserNoActivityTimeout: 400000
    

    【讨论】:

      【解决方案4】:

      我在 Chrome 85.0.4183 上遇到了类似的问题。 我不知道为什么 Karma 失去与浏览器的连接,我得到了 “断开连接,因为 30000 毫秒内没有消息。”

      我已将此添加到 Karma.conf:

      captureTimeout: 210000,
      browserDisconnectTolerance: 3, 
      browserDisconnectTimeout : 210000,
      browserNoActivityTimeout : 210000
      

      现在可以了,希望对你有帮助

      【讨论】:

        【解决方案5】:

        它失败了,因为我在我的组件中设置了 window.location.href,但测试运行只是随机挂起,而不是在我的组件测试中失败。

        【讨论】:

          【解决方案6】:

          查看 karma 的日志,当测试文件出现编译错误时,karma 服务器返回超时错误而不是真正的错误

          【讨论】:

            猜你喜欢
            • 2014-07-03
            • 2015-09-14
            • 2019-08-19
            • 2015-01-05
            • 1970-01-01
            • 1970-01-01
            • 2022-01-26
            • 2017-07-09
            • 1970-01-01
            相关资源
            最近更新 更多