相关文章推荐
//要测试的db.js // const homedir = require('os').homedir() // const home = process.env.HOME || homedir // const p = require('path') // const fs = require('fs') // const dbPath = p.join(home, '.todo') const db = { read(path = dbPath) { return new Promise((resolve, reject) => { fs.readFile(path, { flag: 'a+' }, (error, data) => {//这里将来会调用,jest 的f s,而不是node自身的fs if (error) return reject(error) let list try { list = JSON.parse(data.toString()) } catch (error2) { list = [] resolve(list) module.exports = db //__mocks__下的fs.js const fs = jest.genMockFromModule('fs')//jest的fs const _fs = jest.requireActual('fs')//实际的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 //__test__下的read.spec.js const db = require('../db.js')//要测试的db.js const fs = require('fs') jest.mock('fs')//将node的fs模块换成自己__mock__中的fs describe('这是单元测试', () => { it('can red', async () => { const data = [] fs.setMock('./xxx', null, JSON.stringify(data)) const list = await db.read('./xxx') // console.log(list) // expect(list).toStrictEqual(data)

源码链接

分类:
前端
标签:
 
推荐文章