You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.7 KiB
70 lines
1.7 KiB
import assert from 'assert'; |
|
|
|
describe('forEach', () => { |
|
|
|
it('rejects if the argument is not a function', async () => { |
|
let promise = Observable.of(1, 2, 3).forEach(); |
|
try { |
|
await promise; |
|
assert.ok(false); |
|
} catch (err) { |
|
assert.equal(err.name, 'TypeError'); |
|
} |
|
}); |
|
|
|
it('rejects if the callback throws', async () => { |
|
let error = {}; |
|
try { |
|
await Observable.of(1, 2, 3).forEach(x => { throw error }); |
|
assert.ok(false); |
|
} catch (err) { |
|
assert.equal(err, error); |
|
} |
|
}); |
|
|
|
it('does not execute callback after callback throws', async () => { |
|
let calls = []; |
|
try { |
|
await Observable.of(1, 2, 3).forEach(x => { |
|
calls.push(x); |
|
throw {}; |
|
}); |
|
assert.ok(false); |
|
} catch (err) { |
|
assert.deepEqual(calls, [1]); |
|
} |
|
}); |
|
|
|
it('rejects if the producer calls error', async () => { |
|
let error = {}; |
|
try { |
|
let observer; |
|
let promise = new Observable(x => { observer = x }).forEach(() => {}); |
|
observer.error(error); |
|
await promise; |
|
assert.ok(false); |
|
} catch (err) { |
|
assert.equal(err, error); |
|
} |
|
}); |
|
|
|
it('resolves with undefined if the producer calls complete', async () => { |
|
let observer; |
|
let promise = new Observable(x => { observer = x }).forEach(() => {}); |
|
observer.complete(); |
|
assert.equal(await promise, undefined); |
|
}); |
|
|
|
it('provides a cancellation function as the second argument', async () => { |
|
let observer; |
|
let results = []; |
|
await Observable.of(1, 2, 3).forEach((value, cancel) => { |
|
results.push(value); |
|
if (value > 1) { |
|
return cancel(); |
|
} |
|
}); |
|
assert.deepEqual(results, [1, 2]); |
|
}); |
|
|
|
});
|
|
|