使用jest
yarn add
抄官方文档的例子
__test__目录是测试目录,这是jest的约定
单元测试文件名一般为xxx.unit.js或者xxx.spec.js
单元测试不应该与外界打交道(那是集成测试要做的)
单元测试的对象是函数
功能测试的对象是模块
集成测试的对象是系统
jest mock fs模块(读文件)
const db = {
read(path = dbPath) {
return new Promise((resolve, reject) => {
fs.readFile(path, { flag: 'a+' }, (error, data) => {
if (error) return reject(error)
let list
try {
list = JSON.parse(data.toString())
} catch (error2) {
list = []
}
resolve(list)
})
})
}
}
module.exports = db
const fs = jest.genMockFromModule('fs')
const _fs = jest.requireActual('fs')
Object.assign(fs, _fs)
const mocks = {}
fs.setMock = (path, error, data) => {
mocks[path] = [error, data]
}
fs.readFile = (path, options, callback) => {
console.log('我其实执行的是这个呀')
if (callback === undefined) {
callback = options
}
if (path in mocks) {
callback(...mocks[path])
} else {
_fs.readFile(path, options, callback)
}
}
module.exports = fs
const db = require('../db.js')
const fs = require('fs')
jest.mock('fs')
describe('这是单元测试', () => {
it('can red', async () => {
const data = []
fs.setMock('./xxx', null, JSON.stringify(data))
const list = await db.read('./xxx')
})
})
源码链接