【问题标题】:Running more than 10 tests on karma using jasmine causes: "ERROR: Some of your tests did a full page reload!"使用 jasmine 对 karma 运行超过 10 次测试会导致:“错误:您的一些测试重新加载了整页!”
【发布时间】:2016-03-17 17:34:27
【问题描述】:

所以,这是我使用 Karma 和 Jasmine 对我的 angularJS 代码进行单元测试的第一个项目。使用 Yeoman 角度发生器进行设置。

当我达到 11 个测试时,我收到一条错误消息,提示“您的某些测试完成了整页重新加载”。我没有做任何会触发重新加载的测试。

深入挖掘,我看到 Github 上引用了相同的问题。 https://github.com/jasmine/jasmine/issues/366 -- (FuzzySockets cmets)

问题似乎源于 jasmine-core 中的一行代码 https://github.com/jasmine/jasmine/blob/master/lib/jasmine-core/jasmine.js

为避免堆栈溢出,maximumSpecCallbackDepth 设置为 20。每次 currentSpecCallbackDepth 超过该值时,将使用 setTimout 函数在新堆栈上执行进一步的测试。

这行似乎会导致问题并使 karma 抛出错误。 (我已经通过在我自己的单元测试中调用setTimeout 方法验证了这一点,它抛出了同样的错误)。

如果将maximumSpecCallbackDepth 更改为100,我的测试运行良好,最后不会抛出任何错误

有没有人看到这个问题并知道解决方法?我正在使用最新版本的 karma(0.13.15) 和 jasmine(2.4.1)。

我并没有真正搞乱 yeoman 生成的默认 grunt 或 karma 配置,只是我使用的是 chrome 启动器而不是默认的 phantomJS,所以我不明白其他人是怎么做的在这里没有遇到同样的问题。

【问题讨论】:

  • 我所有的测试都被执行了

标签: angularjs unit-testing jasmine karma-runner karma-jasmine


【解决方案1】:

+1 对此问题。正如你所说,它是由 maximumSpecCallbackDepth 限制引起的,但到目前为止我还没有找到解决这个问题的方法。您可能可以在这里https://github.com/karma-runner/karma/issues/1101 跟踪问题。

一种临时解决方案是减少项目中嵌套的“描述”块。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,全局 beforeEach 中的角度注入停止工作,并且在 maxSpecCallbackDepth 的 20 个限制之后所有测试都失败了。

    在我的调查过程中,我发现 angular-mock 在达到限制时不能很好地与 jasmine 中的 setTimeout 配合使用。

    以下作为示例给出的代码将在每个测试用例上创建一个新的注入器:

    var yourService;
    beforeEach(module('app'));
    beforeEach(inject(function(_yourService_) {
        yourService = _yourService_;
    }));
    

    相反,您可以执行以下操作,这将使用单个注入器并且只注册一次您的模块。

    var yourService;
    module.sharedInjector();
    beforeAll(module('app'));
    beforeEach(inject(function(_yourService_) {
        yourService = _yourService_;
    }));
    

    希望这可能对其他人有所帮助,因为我花了将近一周的时间才发现这是问题的根本原因,而不是像某些人在 github 上认为的 Jasmine 本身。

    【讨论】:

      猜你喜欢
      • 2015-06-03
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 2019-02-17
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多