Skip to content

Commit 77f2904

Browse files
committed
test: add timer tests
1 parent dadbdf6 commit 77f2904

File tree

2 files changed

+78
-7
lines changed

2 files changed

+78
-7
lines changed

.nycrc.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"exclude": [
3-
".yarn/**",
4-
"scripts"
3+
"**/*.spec.ts",
4+
".yarn/**"
55
]
66
}

packages/timer/tests/index.spec.ts

+76-5
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ function withContext(callback: (ctx: Context, clock: InstalledClock) => any, con
1818
}
1919

2020
describe('ctx.timer', () => {
21-
describe('ctx.setTimeout()', () => {
21+
describe('ctx.timeout()', () => {
2222
it('basic support', withContext(async (ctx, clock) => {
2323
const callback = mock.fn()
2424
ctx.timeout(callback, 1000)
@@ -38,7 +38,7 @@ describe('ctx.timer', () => {
3838
assert.strictEqual(callback.mock.calls.length, 0)
3939
}))
4040

41-
it('without callback', withContext(async (ctx, clock) => {
41+
it('promise', withContext(async (ctx, clock) => {
4242
const resolve = mock.fn()
4343
const reject = mock.fn()
4444
ctx.timeout(1000).then(resolve, reject)
@@ -55,7 +55,7 @@ describe('ctx.timer', () => {
5555
}))
5656
})
5757

58-
describe('ctx.setInterval()', () => {
58+
describe('ctx.interval()', () => {
5959
it('basic support', withContext(async (ctx, clock) => {
6060
const callback = mock.fn()
6161
const dispose = ctx.interval(callback, 1000)
@@ -69,7 +69,7 @@ describe('ctx.timer', () => {
6969
assert.strictEqual(callback.mock.calls.length, 2)
7070
}))
7171

72-
it('without callback (manual dispose)', withContext(async (ctx, clock) => {
72+
it('async iterator (manual return)', withContext(async (ctx, clock) => {
7373
const callback = mock.fn()
7474
const iterator = ctx.interval(1000)
7575
async function iterate() {
@@ -92,7 +92,78 @@ describe('ctx.timer', () => {
9292
assert.strictEqual(reject.mock.calls.length, 0)
9393
}))
9494

95-
it('without callback (context dispose)', withContext(async function* (ctx, clock) {
95+
it('async iterator (manual throw)', withContext(async (ctx, clock) => {
96+
const callback = mock.fn()
97+
const iterator = ctx.interval(1000)
98+
async function iterate() {
99+
for await (const _ of iterator) {
100+
callback()
101+
}
102+
}
103+
const resolve = mock.fn()
104+
const reject = mock.fn()
105+
iterate().then(resolve, reject)
106+
assert.strictEqual(callback.mock.calls.length, 0)
107+
await clock.tickAsync(1000)
108+
assert.strictEqual(callback.mock.calls.length, 1)
109+
await clock.tickAsync(1000)
110+
assert.strictEqual(callback.mock.calls.length, 2)
111+
iterator.throw!()
112+
await clock.tickAsync(1000)
113+
assert.strictEqual(callback.mock.calls.length, 2)
114+
assert.strictEqual(resolve.mock.calls.length, 0)
115+
assert.strictEqual(reject.mock.calls.length, 1)
116+
}))
117+
118+
it('async iterator (break return)', withContext(async (ctx, clock) => {
119+
const callback = mock.fn()
120+
const iterator = ctx.interval(1000)
121+
async function iterate() {
122+
let i = 0
123+
for await (const _ of iterator) {
124+
if (++i > 2) break
125+
callback()
126+
}
127+
}
128+
const resolve = mock.fn()
129+
const reject = mock.fn()
130+
iterate().then(resolve, reject)
131+
assert.strictEqual(callback.mock.calls.length, 0)
132+
await clock.tickAsync(1000)
133+
assert.strictEqual(callback.mock.calls.length, 1)
134+
await clock.tickAsync(1000)
135+
assert.strictEqual(callback.mock.calls.length, 2)
136+
await clock.tickAsync(1000)
137+
assert.strictEqual(callback.mock.calls.length, 2)
138+
assert.strictEqual(resolve.mock.calls.length, 1)
139+
assert.strictEqual(reject.mock.calls.length, 0)
140+
}))
141+
142+
it('async iterator (break throw)', withContext(async (ctx, clock) => {
143+
const callback = mock.fn()
144+
const iterator = ctx.interval(1000)
145+
async function iterate() {
146+
let i = 0
147+
for await (const _ of iterator) {
148+
if (++i > 2) throw new Error('test')
149+
callback()
150+
}
151+
}
152+
const resolve = mock.fn()
153+
const reject = mock.fn()
154+
iterate().then(resolve, reject)
155+
assert.strictEqual(callback.mock.calls.length, 0)
156+
await clock.tickAsync(1000)
157+
assert.strictEqual(callback.mock.calls.length, 1)
158+
await clock.tickAsync(1000)
159+
assert.strictEqual(callback.mock.calls.length, 2)
160+
await clock.tickAsync(1000)
161+
assert.strictEqual(callback.mock.calls.length, 2)
162+
assert.strictEqual(resolve.mock.calls.length, 0)
163+
assert.strictEqual(reject.mock.calls.length, 1)
164+
}))
165+
166+
it('async iterator (context dispose)', withContext(async function* (ctx, clock) {
96167
const callback = mock.fn()
97168
const iterator = ctx.interval(1000)
98169
async function iterate() {

0 commit comments

Comments
 (0)