写单测时,如何用Mock模拟取代原来的方法?

2020-08-13  本文已影响0人  喜悦的狮子
日更 1Day

序:

写单元测试就要做好隔离,节点、逻辑上做好隔离,接口上也做好隔离。
想想,如果每次单测都要跑那么多接口,万一性能不给力,一遍下来黄花菜都凉了。
所以我们就要用到 Mock,现在结合 Jest 来看看 Mock 是如何模拟方法的吧~

~/demo.js

// 引入 axios 包
import axios from 'axios'

// 导出 getName 方法
export const getName = () => {
  return axios.get('/').then(res => res.data) // 瞎写的地址
}

~/demo.test.js

正常情况下我们需要模拟真实的环境

import axios from 'axios'

test('测试 getName 方法是返回了帅b的名字'),() => {
  return getName().then(data => {
    expect(data).equal('石小阳') // 判断是否返回了帅b的名字
  })
}

~/Mock/demo.js

预备要狸猫换太子的函数,并且文件、方法起名保持一致。

export const fetchData = () => {
  return new Promise((resolved, reject) => {
    resolved(
       "石小阳" 
    )
  })
}

测试 x

~/demo.test.js

改造版的测试

jest.mock('./demo'); // 采取模拟,会自动到Mock文件下的同名文件下获取同名方法
// jest.unmock('./mock'); // 取消模拟
import { getName } from './demo'; // 引入方法
// const { getNumber } = jest.requireActual('./demo') // 要注意的是,如果同时有想要采取模拟和费采取模拟的两种方法,非采取模拟的方法就必须使用 jest.requireActual()来引入。

test('getName 测试', () => {
    return getName().then(data => {
      expect(data).toEqual('石小阳');
    })
})

测试通过✔

总结:

如果想要模拟方法
1、要准备好用备用的同名食材(方法)
2、使用jest.mock 全自动找到备用食材(方法)
3、如果部分要用原食材(方法),还可以使用 jest.requireActual()获取。

日常学习打卡交流请加入“小熊的技术小组”


上一篇下一篇

猜你喜欢

热点阅读