当前位置: 首页 > 知识库问答 >
问题:

使用jasmine在karma上运行超过10个测试会导致:“错误:您的一些测试重新加载了整个页面!”

长孙鸿
2023-03-14

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

当我进行到11个测试时,我得到一个错误,说“你的一些测试做了一整页重新加载”。我不会做任何会触发重新加载的测试。

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

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

为了避免堆栈溢出,max umSpecCallbackDepth设置为20。每次onetSpecCallbackDepth超过这个值时,都会使用setTimout函数在新堆栈上执行进一步的测试。

这条线似乎会引起问题,并使业力抛出错误。(我已经通过在我自己的单元测试中调用setTimeout方法来验证了这一点,它抛出了相同的错误)。

如果将 maximumSpecCallbackDepth 更改为 100,则我的测试运行正常,并且最后不会抛出任何错误

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

我并没有真的搞砸太多与yeoman生成的默认咕噜声或karma配置,除了我使用chrome启动器而不是默认的phantomJS,所以我不明白为什么其他人在这里没有面临同样的问题。

共有2个答案

籍辰沛
2023-03-14

我遇到了一个类似的问题,即在Each之前全局的角度注入停止工作,并且在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上认为的茉莉花本身。

岳安福
2023-03-14

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

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

 类似资料:
  • 问题内容: 我正在努力使用Karma + Jasmine测试AngularJS工厂。 我无法将工厂注入变量。 我究竟做错了什么? 注意:文件已正确加载 厂: 码: 输出: 问题答案: 您需要致电:

  • 本文向大家介绍使用Jasmine和Karma对AngularJS页面程序进行测试,包括了使用Jasmine和Karma对AngularJS页面程序进行测试的使用技巧和注意事项,需要的朋友参考一下 AngularJS是继jQuery之后发生在JavaScript上最好的东西。这也是JavaScript开发一直以来想要的方式。Angular主要的优点之一就是它的依赖注入(Dependency Inje

  • 问题内容: 如何使用AngularJS / karma / jasmine测试来测试API后端? 我试图创建显示我的错误的最小测试用例: echo_server.py 测试/单位/apiSpec.js 输出 问题答案: 提到的测试堆栈不适用于这种方式。由于该请求已装饰在您原始请求的顶部,因此该请求永远不会被分派。 要允许请求通过,您要么需要排除,要么指定某些网址应像这样通过: 在此处阅读文档 另外

  • 我正在我的开发箱上运行Karma/Jasmine/Angular 2.0测试。就在最近,我的开发箱上的Jasmine决定开始运行我的测试三次。是的,整整三次,每次都是。 在第一次运行时,一切都按预期通过。然而,在第二次和第三次通过时,所有相同的事情都失败了。它总是承认有7次测试,但运行21次,10次失败(一年级数学)??? 这在Travis和SauceLabs上也失败了。(注意:这链接到一个包含3

  • jasmine:在jasmine指定的超时内没有调用异步回调。DEFAULT_TIMEOUT_INTERVAL 测试window.post消息指令 用Jasmine async测试postMessage不起作用 我有下面的代码,我正在接收下面的输出。 在jasmine.DEFAULT\u timeout\u INTERVAL指定的超时内未调用异步回调 myService在父描述函数中定义。正如我所

  • 设置: 我有一门考试课。 这个测试类有几个带有注释的方法。 数据中有7条记录(行)。 所有测试都是顺序的 问题: 我需要用一行数据运行所有方法(测试),但到目前为止,它会在所有行上重复相同的测试,即如果有7行数据,那么测试1将运行7次,然后第二次测试将开始,第二次测试也会如此,以此类推。 我希望对第1行运行所有测试,然后对第2行再次运行所有测试。 我正在使用ApachePOIAPI从ms exce