美文网首页
单元测试之文件模块

单元测试之文件模块

作者: kzc爱吃梨 | 来源:发表于2022-01-22 00:32 被阅读0次

安装jest

yarn add --dev jest

将下面的配置部分添加到你的package.json 里面:

{
  "scripts": {
    "test": "jest"
  }
}

创建文件目录的规则

├── __tests__
│   └── component.spec.js # test
│   └── anything # test
├── package.json # not test
├── foo.test.js # test
├── bar.spec.jsx # test
└── component.js # not test

创建测试文件(如何改写模块)

const db = require('../db.js')
const fs = require('fs')
jest.mock('fs') // 必须添加,改写的假fs模块

describe('db', () => {
    afterEach(() => {
        fs.clearMocks()
    })
    it('can read', async () => {
        const data = [{ title: 'hi', done: true }]
        fs.setReadFileMock('/xxx', null, JSON.stringify(data))
        const list = await db.read('/xxx')
        expect(list).toStrictEqual(data)   // 严格相等
    })
    it('can write', async () => {
        let fakeFile
        fs.setWriteFileMock('/yyy', (path, data, callback) => {
            fakeFile = data
            callback(null)
        })
        const list = [{ title: '见欧阳娜娜', done: true }, { title: '见迪丽热巴', done: true }]
        await db.write(list, '/yyy')
        expect(fakeFile).toBe(JSON.stringify(list) + '\n')
    })
})

如何测试写文件

const fs = jest.genMockFromModule('fs'); // 专门用于测试的模块
const _fs = jest.requireActual('fs'); // 导入真实的fs用的方法

Object.assign(fs, _fs)

let readMocks = {}

fs.setReadFileMock = (path, error, data) => {
    readMocks[path] = [error, data]
}

fs.readFile = (path, options, callback) => {
    if (callback === undefined) {
        callback = options
    }
    if (path in readMocks) {
        callback(...readMocks[path])
    } else {
        _fs.readFile(path, options, callback)
    }
}

let writeMocks = {}

fs.setWriteFileMock = (path, fn) => {
    writeMocks[path] = fn
}

fs.writeFile = (path, data, options, callback) => {
    if (path in writeMocks) {
        writeMocks[path](path, data, options, callback)
    } else {
        _fs.writeFile(path, data, options, callback)
    }
}

检查结果

运行命令

yarn test
运行结果

相关文章

  • 单元测试之文件模块

    安装jest 将下面的配置部分添加到你的package.json 里面: 创建文件目录的规则 创建测试文件(如何改...

  • 11个最好的JavaScript单元测试框架和工具

    单元测试的重要性 单元测试是在模块层面上测试实现的代码的过程。单元测试允许你确保你开发的模块满足业务文件所规定的要...

  • 软件开发中的完整测试所包括的环节:UT、IT、ST、UAT

    一、UT(单元测试,Unit Test) 单元测试任务包括: 模块接口测试; 模块局部数据结构测试; 模块边界条件...

  • python标准库——unittest模块

    unittest模块(单元测试模块) 单元测试的好处: 在编写代码之前,通过编写单元测试来强迫你使用有用的方式细化...

  • 单元测试及unittest单元测试框架

    一、单元测试 1、单元测试:在计算机编程中,单元测试(Unit Testing),又称为模块测试,是针对程序模块(...

  • 测试名称及作用

    UT是单元测试,Unit Test; 单元测试任务包括:1 模块接口测试;2 模块局部数据结构测试;3 模块边界条...

  • 单元测试的基本方法

    单元测试的对象是软件设计的最小单位——模块。单元测试的依据是详细设描述,单元测试应对模块内所有重要的控制路径设计测...

  • 测试

    什么是单元测试? 单元测试(英语:Unit Testing)又称为模块测试, 是针对程序模块(软件设计的最小单位)...

  • 测试分类

    1、单元测试 主要测试对象是代码中的每个模块或者函数,对它们设计用例并进行测试。 2、集成测试 主要针对每个模块之...

  • mock框架分享

    什么是单元测试? 单元测试(又称为模块测试, Unit Testing)是针对程序模块(软件设计的最小单位)来进行...

网友评论

      本文标题:单元测试之文件模块

      本文链接:https://www.haomeiwen.com/subject/potuhrtx.html