用jest测试微信小程序
jest也是微信官方推荐的.
最简单的方式: jest安装后, 在目录下运行jest
就可以. 它会搜索当前目录和所有子目录,并运行*.test.js
结尾的所有测试,并汇总.
对于微信中的一些全局模块如wx
, 需要mock. 在测试目录下建立__mocks__/
目录, 所有要mock的都放在这儿. 如放个wx.js
在*.test.js
中, 对全局的wx赋值global.wx=require('__mocks__/wx.js')
.
wx.js
使用module.exports
导出即可.
除了自己直接写mock模拟的函数外(如写一个wx.cloud.database = function mockFunc(){}
的mock函数), 还可以用jest的mock函数const mockFunc = jest.fn(函数体);wx.cloud.database = mockFunc
. 这样被mock的函数就会自带统计和记录功能.
如:
- 统计mock函数被调用的次数
mockFunc.mock.calls.length
- mock函数第n次调用时的第x个参数值
mockFunc.mock.calls[n][x]
- mock函数第n次调用的返回结果
mockFunc.mock.result[n].value
- mock函数最后一次调用的第一个参数
mockFunc.mock.lastCall[0]
- 对class的mock, 同样可以使用
new
const myMock1 = jest.fn();const a = new myMock1();
- mock函数定义每一次的返回值,并且尅循环调用
mockFunc.mockReturnValueOnce(10).mockReturnValueOnce('x').mockReturnValue(true)
- mock模块的异步Promise返回值
import axios from 'axios';
jest.mock('axios');
const users = [{name: 'Bob'}];
const resp = {data: users};
axios.get.mockResolvedValue(resp);
- mock一个模块的部分函数和值