test: test for scheduler
This commit is contained in:
parent
73106b8553
commit
d69d0c0216
12
jest.config.js
Normal file
12
jest.config.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
module.exports = {
|
||||||
|
preset: 'ts-jest',
|
||||||
|
coverageDirectory: 'coverage',
|
||||||
|
coverageReporters: ['html', 'lcov', 'text'],
|
||||||
|
collectCoverageFrom: ['packages/*/src/**/*.ts'],
|
||||||
|
moduleFileExtensions: ['ts', 'js', 'json'],
|
||||||
|
moduleNameMapper: {
|
||||||
|
'^@vue/(.*?)$': '<rootDir>/packages/$1/src'
|
||||||
|
},
|
||||||
|
rootDir: __dirname,
|
||||||
|
testMatch: ['<rootDir>/packages/**/__tests__/**/*spec.(t|j)s']
|
||||||
|
}
|
@ -23,10 +23,12 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/jest": "^23.3.2",
|
||||||
"chalk": "^2.4.1",
|
"chalk": "^2.4.1",
|
||||||
"dts-bundle": "^0.7.3",
|
"dts-bundle": "^0.7.3",
|
||||||
"execa": "^1.0.0",
|
"execa": "^1.0.0",
|
||||||
"fs-extra": "^7.0.0",
|
"fs-extra": "^7.0.0",
|
||||||
|
"jest": "^23.6.0",
|
||||||
"lerna": "^3.4.0",
|
"lerna": "^3.4.0",
|
||||||
"lint-staged": "^7.2.2",
|
"lint-staged": "^7.2.2",
|
||||||
"minimist": "^1.2.0",
|
"minimist": "^1.2.0",
|
||||||
@ -36,6 +38,7 @@
|
|||||||
"rollup-plugin-replace": "^2.0.0",
|
"rollup-plugin-replace": "^2.0.0",
|
||||||
"rollup-plugin-terser": "^2.0.2",
|
"rollup-plugin-terser": "^2.0.2",
|
||||||
"rollup-plugin-typescript2": "^0.17.0",
|
"rollup-plugin-typescript2": "^0.17.0",
|
||||||
|
"ts-jest": "^23.10.0",
|
||||||
"typescript": "^3.0.3",
|
"typescript": "^3.0.3",
|
||||||
"yorkie": "^2.0.0"
|
"yorkie": "^2.0.0"
|
||||||
}
|
}
|
||||||
|
78
packages/scheduler/__tests__/scheduler.spec.ts
Normal file
78
packages/scheduler/__tests__/scheduler.spec.ts
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
import { queueJob, nextTick } from '../src/index'
|
||||||
|
|
||||||
|
test('queueJob', async () => {
|
||||||
|
const calls: any = []
|
||||||
|
const job1 = () => {
|
||||||
|
calls.push('job1')
|
||||||
|
}
|
||||||
|
const job2 = () => {
|
||||||
|
calls.push('job2')
|
||||||
|
}
|
||||||
|
queueJob(job1)
|
||||||
|
queueJob(job2)
|
||||||
|
expect(calls).toEqual([])
|
||||||
|
await nextTick()
|
||||||
|
expect(calls).toEqual(['job1', 'job2'])
|
||||||
|
})
|
||||||
|
|
||||||
|
test('queueJob while already flushing', async () => {
|
||||||
|
const calls: any = []
|
||||||
|
const job1 = () => {
|
||||||
|
calls.push('job1')
|
||||||
|
// job1 queues job2
|
||||||
|
queueJob(job2)
|
||||||
|
// should be called sync
|
||||||
|
expect(calls).toEqual(['job1', 'job2'])
|
||||||
|
}
|
||||||
|
const job2 = () => {
|
||||||
|
calls.push('job2')
|
||||||
|
}
|
||||||
|
queueJob(job1)
|
||||||
|
expect(calls).toEqual([])
|
||||||
|
await nextTick()
|
||||||
|
expect(calls).toEqual(['job1', 'job2'])
|
||||||
|
})
|
||||||
|
|
||||||
|
test('queueJob w/ postFlushCb', async () => {
|
||||||
|
const calls: any = []
|
||||||
|
const job1 = () => {
|
||||||
|
calls.push('job1')
|
||||||
|
}
|
||||||
|
const job2 = () => {
|
||||||
|
calls.push('job2')
|
||||||
|
}
|
||||||
|
const cb1 = () => {
|
||||||
|
calls.push('cb1')
|
||||||
|
}
|
||||||
|
const cb2 = () => {
|
||||||
|
calls.push('cb2')
|
||||||
|
}
|
||||||
|
queueJob(job1, cb1)
|
||||||
|
queueJob(job2, cb2)
|
||||||
|
await nextTick()
|
||||||
|
expect(calls).toEqual(['job1', 'job2', 'cb1', 'cb2'])
|
||||||
|
})
|
||||||
|
|
||||||
|
test('queueJob w/ postFlushCb while flushing', async () => {
|
||||||
|
const calls: any = []
|
||||||
|
const job1 = () => {
|
||||||
|
calls.push('job1')
|
||||||
|
// job1 queues job2
|
||||||
|
queueJob(job2, cb2)
|
||||||
|
// should be called sync
|
||||||
|
expect(calls).toEqual(['job1', 'job2'])
|
||||||
|
}
|
||||||
|
const job2 = () => {
|
||||||
|
calls.push('job2')
|
||||||
|
}
|
||||||
|
const cb1 = () => {
|
||||||
|
calls.push('cb1')
|
||||||
|
}
|
||||||
|
const cb2 = () => {
|
||||||
|
calls.push('cb2')
|
||||||
|
}
|
||||||
|
queueJob(job1, cb1)
|
||||||
|
expect(calls).toEqual([])
|
||||||
|
await nextTick()
|
||||||
|
expect(calls).toEqual(['job1', 'job2', 'cb1', 'cb2'])
|
||||||
|
})
|
@ -1,10 +1,11 @@
|
|||||||
const queue: Array<() => void> = []
|
const queue: Array<() => void> = []
|
||||||
const postFlushCbs: Array<() => void> = []
|
const postFlushCbs: Array<() => void> = []
|
||||||
const p = Promise.resolve()
|
const p = Promise.resolve()
|
||||||
|
|
||||||
let flushing = false
|
let flushing = false
|
||||||
|
|
||||||
export function nextTick(fn: () => void) {
|
export function nextTick(fn?: () => void): Promise<void> {
|
||||||
p.then(fn)
|
return p.then(fn)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function queueJob(job: () => void, postFlushCb?: () => void) {
|
export function queueJob(job: () => void, postFlushCb?: () => void) {
|
||||||
|
Loading…
Reference in New Issue
Block a user