Код в моем предыдущем ответе можно упростить до:
def test_afunction_throws_exception(self):
self.assertRaises(ExpectedException, afunction)
И если afunction принимает аргументы, просто передайте их в assertRaises следующим образом:
def test_afunction_throws_exception(self):
self.assertRaises(ExpectedException, afunction, arg1, arg2)
Я понял, что это не так уж сложно сделать с пользовательским оператором
import { pipe } from 'rxjs';
import { tap } from 'rxjs/operators';
export const tapTimeout = (onTimeout:(()=>any), delay:number) => {
let timeout = window.setTimeout(onTimeout, delay);
return pipe(tap(x=> {
window.clearTimeout(timeout);
timeout = window.setTimeout(onTimeout,delay);
}));
}
. Вам даже не нужен пользовательский оператор для этого, потому что вы можете использовать timeout()
и retry()
:
return database[index].pipe(
timeoutWith(5 * 60 * 1000),
retry(),
);
retry()
будет повторно подписываться на его источник, если он выдаст ошибку. Тем не менее, все это ожидает, что database[index]
обновляется всегда, когда вы подписываетесь на него.