jest mock的一些思路

基本场景可参考:https://www.cnblogs.com/SamWeb/p/11454923.html

mock的其他方式:https://jestjs.io/docs/zh-Hans/mock-function-api#mockfnmockrejectedvaluevalue

其他场景:需要mock一个promise或者函数多层回调时,可参考:

        

再补充几种用法:

  1  定时器的代码如何test

componentDidMount() {

    setTimeout(() => {

      this.setState({ show: true });

      this.setHideTimer();

    }, 0);

  }

  setHideTimer = () => {

    if (this.hideTimer) clearTimeout(this.hideTimer);

    this.hideTimer = setTimeout(() => {

      this.setState({ show: false });

    }, 2000);

  }

测试方法:

jest.useFakeTimers();

test('test float message info', () => {

    const testMessage = 'Test Message'

    FloatMessage.info(testMessage);

    act(() => {

        jest.advanceTimersByTime(0);

      });

    expect(document.getElementsByClassName('floatMessage').length).toBe(1)

    act(() => {

        jest.advanceTimersByTime(3000);

      });

    expect(screen.queryByText(testMessage).length).toBe(undefined)

})

2  当前组件调用了引入的其他组件或者类库的方法,如何test

   源码补充一下:主要是一个request调用了第三方的extend生成了新的request方法;

测试如下:

jest.mock('umi-request');

jest.mock('@/components/Auth/authClient.js');

const mockFn = jest.fn();

beforeAll(async() => {

    jest.spyOn(umi, 'extend').mockImplementation(options => {

        options.errorHandler({ response: { status: 401 } });

        options.errorHandler({ response: { status: 400 } });

        options.errorHandler({ response: { status: 555, statusText: 'aaa' } });

        options.errorHandler({ response: {} });

        options.errorHandler({ response: null });

        function request() {

            // eslint-disable-next-line no-unused-expressions

           return { umi,

            ...{ interceptors: { request: { use(callback) {

               // eslint-disable-next-line no-unused-expressions

               callback && callback('ddd');

            } } } } };

        }

        return request();

    });

    jest.spyOn(client, 'getAuthToken').mockImplementation(() => new Promise(resolve => {

           resolve({

            asJwtString: mockFn.mockReturnValue('aaa'),

           });

       }));

})

主要使用spyOn的方式,此方法主要是来mock某个类下面的具体方法的实现;针对当前的组件来说,其他引入的组件都算是测试过的,测试具体实现也是在各自组件的TEST里面,所以当前组件不需要关注引入的东东,直接MOCK掉,然后对需要调用的方法,写假的实现,让你的组件调用到你写的假实现里面去就可以了。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值