【问题标题】:Jasmine - "Cannot read property 'subscribe' of undefined thrown"Jasmine - “无法读取未定义抛出的属性‘订阅’”
【发布时间】:2019-07-19 08:58:29
【问题描述】:

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

Chrome 72.0.3626 (Mac OS X 10.14.3) 错误 { "message": "在 afterAll 中抛出了一个错误\nUncaught TypeError: Cannot read property 'subscribe' of undefined throwed", “str”:“在 afterAll 中引发了一个错误\nUncaught TypeError:无法读取未定义引发的属性“订阅””} Chrome 72.0.3626(Mac OS X 10.14.3):执行 148 次中的 131 次(1 次失败)错误(51.175 秒/50.533 秒)

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

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

我怎样才能找到这个错误的来源?有人在 Jasmine 中遇到过任何不一致的情况吗?

感谢大家的帮助!

【问题讨论】:

  • 它说 1 FAILED,如果你在 cmd 窗口中向上滚动,它应该告诉你哪个测试失败了。很有可能它因为那个异常而失败了
  • 除了日志之外什么都没有。我们的测试结果进入了/src下的一个js-tests.xml文件,但是里面的结果并不一致。
  • @UğurDinç 看起来您在规范中尝试使用的值之一未定义。还有一件事是您在代码中使用任何 Observable 并订阅该 Observable?

标签: angular unit-testing jasmine


【解决方案1】:

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

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

module.exports = function(config) {
  config.set({
    client: {
      jasmine: {
        random: false
      }
    }
  })
}

在我们的案例中,我们的一项测试因未正确处理其中一个组件中的异步调用而失败。删除该测试解决了不一致问题。

即使控制台中的消息仍然无法查明错误的始作俑者,它至少能够显示错误来自的组件/测试套件。

【讨论】:

  • @DavidFindlay 我记不清了,但如果我不得不猜测的话,我会说这是一个没有正确发现/返回的 api 调用。为确保一切顺利,请确保在 beforeEach 中监视每一个服务调用,然后编写测试。
  • 非常感谢,您为我节省了数小时的调试时间 :)。通过打开这个标志,我至少可以检测出哪个套件引发了错误并四处挖掘我发现了问题所在。
猜你喜欢
  • 1970-01-01
  • 2020-01-18
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
相关资源
最近更新 更多