
序:
写单元测试就要做好隔离,节点、逻辑上做好隔离,接口上也做好隔离。
想想,如果每次单测都要跑那么多接口,万一性能不给力,一遍下来黄花菜都凉了。
所以我们就要用到 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()获取。
日常学习打卡交流请加入“小熊的技术小组”

网友评论