美文网首页
写单测时,如何用Mock模拟取代原来的方法?

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

作者: 喜悦的狮子 | 来源:发表于2020-08-13 23:41 被阅读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()获取。

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


    相关文章

      网友评论

          本文标题:写单测时,如何用Mock模拟取代原来的方法?

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