Angular 4 Jasmine Actual不是一个函数

时间:2017-09-28 01:46:29

标签: angular testing jasmine karma-jasmine

我正在做expect(ClassUnderTest.someMethod(withSomeParams)).toThrow()我正在接受: -

Error: <toThrow> : Actual is not a Function
Usage: expect(function() {<expectation>}).toThrow(<ErrorConstructor>, <message>)

我不明白用法示例。

我试过expect(() => ClassUnderTest.someMethod(withSomeParams)).toThrow()我得到Expected function to throw an exception.。并尝试: -

ClassUnderTest.someMethod(withSomeParams)
              .subscribe( res => res,
                          err => console.log(err))

我得到了Error: 1 periodic timer(s) still in the queue.

我不明白如何在抛出错误时写下这个期望。

1 个答案:

答案 0 :(得分:1)

您需要将函数本身传递给expect。你拥有它的方式,你已经传递了ClassUnderTest.someMethod(withSomeParams)结果

您实际上是在expect(() => ClassUnderTest.someMethod(withSomeParams)).toThrow()中正确执行此操作。该错误可能是由于实现中的实际错误,也可能是因为this绑定了箭头函数。

要解决此问题,您可以尝试:

expect(function () { ClassUnderTest.someMethod(withSomeParams) };).toThrow()

或:

expect(ClassUnderTest.someMethod.bind(null, withSomeParams)).toThrow()

请参阅this StackOverflow post中的Jasmine docs.toThrow部分。