美文网首页
07|Jest中的Mock

07|Jest中的Mock

作者: 雪燃归来 | 来源:发表于2020-05-22 19:50 被阅读0次

jest中mock函数的作用
1、捕获函数的调用和返回结果,以及this和调用顺序
2、他可以让我们自由的设置返回结果
3、改变函数的内部实现(测试接口)

一、基础的测试示例

export const runCallback = (callback) => {
    return callback();
}

import { runCallback } from './demo'
test('测试 runCallback', () => {
   const func = () => {
       return 'abc'
   }
   expect(runCallback(func)).toBe('abc')
})

二、使用jest.fn

export const runCallback = (callback) => {
    callback('abc');
}
import { runCallback } from './demo'
test('测试 runCallback', () => {
    const func = jest.fn()
    runCallback(func)
    expect(func).toBeCalled()
    console.log(func.mock)
})

test('测试 runCallback', () => {
   const func = jest.fn()
//    const func = jest.fn(() => {
//        return '456'
//    })
// func.mockReturnValueOnce('Dell'); //2 他可以让我们自由设置返回结果
// func.mockReturnValue('Dell');
   runCallback(func)
   runCallback(func)
   //expect(func.mock.calls.length).toBe(2)
   expect(func.mock.calls[0]).toEqual(['abc'])
   console.log(func.mock)
})
image.png

三、fn.mock.instances

export const createObject = (classItem) => {
    new classItem()
}
import { createObject } from './demo'
test.only('测试createObject', () => {
    const func = jest.fn(); // 1、捕获函数的调用和返回结果以及this和调用顺序
    createObject(func);
    console.log(func.mock)
})
image.png

四、改变函数的内部实现

import axios from 'axios'
export const getData = () => {
    return axios.get('/api').then(res => res.data)
}

import axios from 'axios'
jest.mock('axios')
test.only('测试getData', async() => {
    axios.get.mockResolvedValue({data:'hello'})
    await getData().then((data) => {
        expect(data).toBe('hello')
    })
})

五、几种相似的结果

const func = jest.fn()
func.mockImplementation(() => {
     console.log('123123');
     return 'dell'
 })

 const func = jest.fn(() => {
        console.log('123123');
        return 'dell'

})

相关文章

网友评论

      本文标题:07|Jest中的Mock

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