Javascript 茉莉花期待着不经过也不接住 试图在量角器中使用expect(fn).toThrow()。
我传递的函数Javascript 茉莉花期待着不经过也不接住 试图在量角器中使用expect(fn).toThrow()。,javascript,exception,jasmine,promise,protractor,Javascript,Exception,Jasmine,Promise,Protractor,我传递的函数(fn)返回一个promise(量角器.promise.defer),量角器应该强制expect()正确处理该函数 在运行时,它不会捕获错误和/或通过测试,而不会捕获错误和/或通过测试。 “预期函数将引发错误” “等待在约3000毫秒后超时” (由browser.wait()的超时参数引发) 我试过使用: deferred.reject()引发可捕获错误 通常通过在有前途的函数上使用.thenCatch()而不是.then()来捕获 deferred.fulfill()
(fn)
返回一个promise(量角器.promise.defer
),量角器应该强制expect()
正确处理该函数
在运行时,它不会捕获错误和/或通过测试,而不会捕获错误和/或通过测试。
- “预期函数将引发错误”
- “等待在约3000毫秒后超时”
- (由
的超时参数引发)browser.wait()
- (由
引发可捕获错误deferred.reject()
- 通常通过在有前途的函数上使用
而不是.thenCatch()
来捕获.then()
- 通常通过在有前途的函数上使用
并“手动”在函数中抛出错误deferred.fulfill()
- 使用语法
抛出新错误()代码>
- 和
抛出{name:'Error',message:'timed out'}
- 和
抛出{name:'Exception'}
- 使用语法
- 我已尝试删除
和.fulfill()
,这意味着expect继续运行的唯一方法是抛出错误.reject()
- 我甚至删除了所有
语句,这样return
就不会完成函数,除非它抛出错误expect
- 更新:尝试使用
而不是.tothrower()
.toThrow()
- 更新:尝试通过自定义匹配器重写
,但我不知道如何在.toThrow()
使原始匹配器返回其中生成匿名函数。然后catch()
对象,而不返回承诺结果
- 对于这种情况,量角器是否正确地覆盖了expect
expect
- 是因为
发生在传递给抛出
而不是原始的的匿名函数中,然后(function(){/*error shown here*/})
函数吗fn
- 我可以让茉莉花定制匹配者承诺稍后返回结果吗?(量角器也解释了这些承诺吗?)
- 还是我忽略了这么简单的事情
expect(function(){..}.toThrow()
在这种情况下工作
我会这样做(不习惯于拖延承诺):
假设这就是用量角器捕捉错误的方式
其他一些实现有一个可以链接的.catch()
方法。可能有助于更清晰的语法,例如:
expect(fn_returning_promise()).to.eventually.be.rejectedWith(...)
.thenCatch(function(error){}}
将是使用的语法。我已经考虑过了,但这是一个非常丑陋的hack,不适合重用。使用expect(true).toBe(false)
没有为测试结果提供任何有用的信息。这确实是一个难题,但是除非量角器提供自定义的异步期望值,否则您必须如何处理异步过程?关于第二点,您希望得到比使用expect().toThrow()得到的信息更多的信息吗
如果进程没有抛出异常?可以用expect(function(){return true})替换它。toThrow()
如果需要?量角器只是自动强制expect(actual)中的实际值
在使用matcher之前要解决的问题,这就是matcher提供的全部内容。关于我的第二点,我意识到我过于理想化了。它目前没有提供任何有用的额外信息。我的意思是说“这不是一个黑客行为”。这就是处理异步过程的方式,以后可能会失败。因此使用done方法。在以前版本的jasmine中,您必须使用run(…)
waitFor(…)
组合…这对于多个异步进程来说非常糟糕…测试用例不可读…我会记住Chai,但出于我的目的,不值得从jasmine切换。现在回想起来,我不需要toThrow()
或在检查元素是否存在时使用承诺匹配器(我只需要thenCatch()
超时)。
expect(fn_returning_promise()).to.eventually.be.rejectedWith(...)