Angular 4中Jasmine实际上不是一个函数

4

我正在使用 expect(ClassUnderTest.someMethod(withSomeParams)).toThrow(),但我遇到了以下问题:

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

我不理解使用示例。

我尝试了 expect(() => ClassUnderTest.someMethod(withSomeParams)).toThrow(),结果得到了 期望函数抛出异常。。我还尝试了:

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

我收到了一个错误信息:Error: 1 periodic timer(s) still in the queue.

我不知道如何编写正确的代码以应对这种错误。

1个回答

2
您需要将函数本身传递到expect中。您现在的做法是,传递了ClassUnderTest.someMethod(withSomeParams)结果
实际上,在expect(() => ClassUnderTest.someMethod(withSomeParams)).toThrow()中,您已经做得正确。错误可能是由于您的实现中存在实际错误或箭头函数与this绑定引起的。
要解决此问题,您可以尝试:
expect(function () { ClassUnderTest.someMethod(withSomeParams) };).toThrow()

或者:

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

请参考这个StackOverflow帖子Jasmine文档中的.toThrow部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接