Я пишу генератор. Я тестирую это с RITEway . Он проверяет, определено ли window.ethereum
. Если его нет, его следует бросить и остановить. По сути, он должен удовлетворять следующим тестам:
describe('handle initialize Web3 saga', async assert => {
global.window = {}
assert({
given: 'nothing, the window object',
should: 'have no property called Web3',
actual: window.web3,
expected: undefined
})
const gen = cloneableGenerator(handleInitializeWeb3)()
{
// The important parts are in this block scope
const clone = gen.clone()
assert({
given: 'window.ethereum undefined',
should: 'throw',
actual: clone.next().value.message,
expected: '[WARNING]: window.ethereum has no provider!'
})
assert({
given: 'nothing',
should: 'be done',
actual: clone.next().done,
expected: true
})
}
class Provider {}
window.ethereum = new Provider()
// ... more tests
})
Вот как я пытался его реализовать.
function* handleInitializeWeb3() {
if (!window.ethereum) {
yield new Error('[WARNING]: window.ethereum has no provider!')
}
// ... more yields
}
, но эта сага не останавливается. Тест, где он should: 'be done'
не пройден, и сага возвращает значения из yield
s вне оператора if
. Как я могу пройти эти тесты и остановить сагу при появлении ошибки?