expect(fn).toThrow()
。我通过的函数(fn)
会返回一个承诺(protractor.promise.defer
),量角器可能会强制expect()
正确处理。
browser.wait()
超时参数引发)deferred.reject()
会引发一个捕获错误
.thenCatch()
代替.then()
来抓住deferred.fulfill()
并在函数中抛出错误"手动"
throw new Error();
throw {name: 'Error', message: 'timed out'}
throw {name: 'Exception'}
.fulfill()
和.reject()
,这意味着期望继续前进的唯一方法是抛出错误。return
语句,以便expect
赢得该功能,除非它抛出错误。.toThrowError()
代替.toThrow()
.toThrow()
,但我不知道如何在.thenCatch()
中创建匿名函数使原始匹配器返回其{{1}没有返回承诺的对象。每次期望失败和错误仍然被抛出并且未被捕获(正如语法所说的那样,它将被抛出)。
result
?expect
发生在传递给throw
而不是原始.then(function(){ /*error thrown here*/ })
函数的匿名函数中吗?fn
方法来考虑这种可能性。答案 0 :(得分:1)
假设您的承诺将在稍后的时间内完成/拒绝(异步),那么在这种情况下您无法依赖expect(function() {..}.toThrow()
。
我会做的是这样的事情(不用于量角器承诺):
it('.....', function(done) {
MyPromise(...)
.then(... my normal process which should throw....)
.then(function() {
// Error not thrown by the process, so fail the test.
expect(true).toBe(false);
},
function(err) {
// Expected error thrown so pass the test.
done();
});
});
假设这是你用量角器承诺错误的方法吗?
其他一些实现有一个.catch()
方法可以链接。
答案 1 :(得分:1)
Chai as Promised可能有助于提供更清晰的语法,例如类似的东西:
expect(fn_returning_promise()).to.eventually.be.rejectedWith(...)