美文网首页前端测试
Jest单元测试mock函数

Jest单元测试mock函数

作者: 雷雨leiyu | 来源:发表于2021-05-14 10:54 被阅读0次

在编写单元测试过程中经常遇到需要依赖外部数据的情况,比如异步请求就需要依赖网络,但我们在测试过程中又不允许发起实际请求,这种情况下就需要mock函数替代真实请求结果。

测试中用到mock函数的三种情况

1. 函数的调用捕获

用于测试回调函数时可以捕获函数有没被调用,参数是什么,返回值是什么等。

// 被测试代码
const processProducts = (products, callback) => {
  products.forEach(product => {
    callback(product)
  })
}
// 测试代码
const mockFunc = jest.fn()
processProducts([{...}], mockFunc)
expect(mockFunc.mock.calls.length).toBe(2)
// mockFunc有calls,results等属性

2. 设置函数返回值

可以通过mock函数的mockReturnValue()方法定制返回值,它的参数就是返回值。

  • mockReturnValue():返回直量;
  • mockResolvedValue():返回promise;
// 同1中的processProducts案例,如果此函数有返回值
processProducts = jest.fn()
processProducts.mockReturnValue({name: "dennis"})
// 当测试代码调用processProducts的时候就会返回{name: "dennis"}

3. 改变原函数的实现

jest.fn()是默认的mock函数,如果不想使用默认或者提供函数实现则可以加上参数。

const mockFunc = jest.fn(x => x + 1)

4. mock模块

以上三种实现都是通过jest.fn()mock函数,而jest.mock()则可以mock模块。

  • jest.mock()
  • jest.spyOn()
// 第一种
jest.mock('request');
const request = require('request');
// mock math 对象上的add方法
const addMock = jest.spyOn(math, "add"); 
addMock.mockImplementation(() => "mock"); // 提供一个实现
// 第二种
jest.mock('request', () => {
    return (url, callback) => {
        callback(null, 'ok', {name: 'sam'})
    }
});
const fetchData = require('./func').fetchData;
test('should return data when fetchData request success', () => {
   return fetchData().then(res => {
       expect(res).toEqual({name: 'sam'})
   })
})

5. 钩子函数

  • beforeAll
  • beforeEach
describe('method called', () => {
    beforeEach(() => {
        window.unicode = false;
        window.local = false;
        window.isEnable = false
    })
})

相关文章

  • Jest单元测试mock函数

    在编写单元测试过程中经常遇到需要依赖外部数据的情况,比如异步请求就需要依赖网络,但我们在测试过程中又不允许发起实际...

  • 使用Jest测试JavaScript(Mock篇)

    在本篇教程中,我们会介绍 Jest 中的三个与 Mock 函数相关的API,分别是jest.fn()、jest.s...

  • react-native单元测试

    react-natice单元测试 基于 Jest + Enzyme 的 React 单元测试 Jest、Enzym...

  • Jest - 模拟函数 mock function

    模拟函数通过擦去真正的函数实现,捕获函数调用(调用传参),当使用 new 实例化的时候捕获构造函数,并允许测试时配...

  • 07|Jest中的Mock

    jest中mock函数的作用1、捕获函数的调用和返回结果,以及this和调用顺序2、他可以让我们自由的设置返回结果...

  • jest 单元测试覆盖debounce 方法(lodash)

    解决办法 一,使用jest.mock 解决办法 二, 使用jest.useFakeTimers(), 然后在调用...

  • React Native单元测试--Jest+Enzyme+st

    React Native的单元测试Jest+Enzyme+storybook demo 配置 Jest配置 Jes...

  • Part 6: 用Jest测试Vue中的Methods中的方法和

    Test Methods and Mock Dependencies in Vue.js with Jest 用J...

  • Mockito

    在单元测试中,为了隔离外部资源,使用mock构造一个虚拟对象,保证测试的目标函数能正常运行。有很多Mock方式,M...

  • Jest

    Jest-Javascript单元测试工具 Jest是一个JavaScript测试框架,由Facebook用来测试...

网友评论

    本文标题:Jest单元测试mock函数

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