Angular 茉莉花;无法读取属性';订阅';“未定义的抛出”;

Angular 茉莉花;无法读取属性';订阅';“未定义的抛出”;,angular,unit-testing,jasmine,Angular,Unit Testing,Jasmine,我刚开始使用Jasmine为现有Angular应用程序编写单元测试,大约有50%的时间,我会遇到以下错误: Chrome 72.0.3626(Mac OS X 10.14.3)错误{ “消息”:“在所有未捕获的TypeError中引发了一个错误:无法读取未定义引发的属性'subscribe'”, “str”:“在之后抛出了一个错误\n未捕获的TypeError:无法读取未定义抛出的”}Chrome的属性“subscribe” 72.0.3626(Mac OS X 10.14.3):执行148(1

我刚开始使用Jasmine为现有Angular应用程序编写单元测试,大约有50%的时间,我会遇到以下错误:

Chrome 72.0.3626(Mac OS X 10.14.3)错误{ “消息”:“在所有未捕获的TypeError中引发了一个错误:无法读取未定义引发的属性'subscribe'”, “str”:“在之后抛出了一个错误\n未捕获的TypeError:无法读取未定义抛出的”}Chrome的属性“subscribe” 72.0.3626(Mac OS X 10.14.3):执行148(1个失败)错误中的131个(51.175秒/50.533秒)

另外50%的时间里,所有测试都顺利通过

这个错误消息的主要问题是Jasmine没有告诉我问题在哪里,而如果我在我的任何测试中编写,例如
expect(true).toBe(false)
,那么Jasmine会告诉我
expect(true).toBe(false)
失败的时间和地点

我怎样才能找到这个错误的来源?有人在《茉莉花》中有过不一致的经历吗


谢谢你的帮助

经过几个小时的挖掘,终于解决了这个问题

karma.conf.js
中将随机标志设置为false之后,控制台中的错误消息开始变得更有意义

module.exports = function(config) {
  config.set({
    client: {
      jasmine: {
        random: false
      }
    }
  })
}
在我们的例子中,我们的一个测试失败,因为没有正确处理其中一个组件中的异步调用。删除该测试修复了不一致性问题


尽管控制台中的消息仍然无法确定错误的始发者,但它至少能够显示错误来自的组件/测试套件。

它表示1失败,如果在cmd窗口中向上滚动,它应该会告诉您哪个测试失败。很有可能它因为这个例外而失败。除了日志,上面什么都没有。我们的测试结果进入/src下的js-tests.xml文件,但其中的结果不一致。@UğurDinç看起来您试图在规范中使用的某个值没有定义。还有一件事,您是否在代码中使用了任何可观察对象并订阅了该可观察对象?@davidfindley我记不清了,但如果我不得不猜测的话,我会说这是一个api调用,没有被正确发现/返回。为了确保一切顺利进行,请确保在每次调用之前在
中监视每个服务调用,并在之后编写测试。非常感谢,您为我节省了数小时的调试时间:)。通过打开这个标志,我至少可以检测出哪个套件抛出了错误,然后四处挖掘,我发现了问题所在。