jest单元测试入门到进阶

概述

使用faceBook公司开发的jest库写点自己ui库的测试用例。

使用
1、安装
npm install --save-dev jest
or
yarn add --dev jest
2、如何写测试文件

测试文件目录:testsor__tests__

测试脚本文件取名:sum.test.js

待测试文件: sum.js

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3qTkjiRA-1665284055616)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bb2f15ed1bf64749ae974ca5bf3862fb~tplv-k3u1fbpfcp-watermark.image?)]

3、运行

将如下代码添加到 package.json 中:

{
  "scripts": {
    "test": "jest"
  }
}

最后,运行 yarn test 或者 npm test ,Jest 将输出如下信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q9Pjtw8r-1665284055619)(https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8db7743a12d54d34bfe49362ed833888~tplv-k3u1fbpfcp-watermark.image?)]

jest教程
1、测试函数
test("测试用列描述信息",()=>{

})
// or
it("测试用例描述信息",()=>{

})
2、断言函数

运行结果与我们预期结果是否一致 断言函数用来验证结果是否正确
全部断言函数

exspect(运行结果).toBe(期望的结果);
//常见断言方法
expect({a:1}).toBe({a:1})//判断两个对象是否相等
expect(1).not.toBe(2)//判断不等
expect({ a: 1, foo: { b: 2 } }).toEqual({ a: 1, foo: { b: 2 } })
expect(n).toBeNull(); //判断是否为null
expect(n).toBeUndefined(); //判断是否为undefined
expect(n).toBeDefined(); //判断结果与toBeUndefined相反
expect(n).toBeTruthy(); //判断结果为true
expect(n).toBeFalsy(); //判断结果为false
expect(value).toBeGreaterThan(3); //大于3
expect(value).toBeGreaterThanOrEqual(3.5); //大于等于3.5
expect(value).toBeLessThan(5); //小于5
expect(value).toBeLessThanOrEqual(4.5); //小于等于4.5
expect(value).toBeCloseTo(0.3); // 浮点数判断相等
expect('Christoph').toMatch(/stop/); //正则表达式判断
expect(['one','two']).toContain('one'); //包含
3、分组函数

在antd的每个组件里面都有一个单独的分组函数

describe("关于每个功能或某个组件的单元测试",()=>{
    // 不同用例的单元测试
})

在这里插入图片描述

4、 异步测试

基于jest提供的两个方法jest.useFakeTimersjest.runAllTimers可以更优雅的对延时功能的测试。

describe('定时器相关测试', () => {
    // 开启定时函数模拟
    jest.useFakeTimers();

    function foo(callback) {
        console.log('foo...')
        setTimeout(() => {
            callback && callback();
        }, 1000)
    }
    it('断言异步测试', () => {
        //创建mock函数,用于断言函数被执行或是执行次数的判断
        const callback = jest.fn();
        foo(callback);
        expect(callback).not.toBeCalled();
        //快进,使所有定时器回调
        jest.runAllTimers();
        expect(callback).toBeCalled();
    })
});

还可以使用async await

describe('定时器相关测试', () => {
    
    function fetchData(v){
        return new Promise((resolve,reject) => {
            resolve(v)
        })
    }

    test('the data is peanut butter', async () => {
      const data = await fetchData();
      expect(data).toBe('peanut butter');
    });

    test('the fetch fails with an error', async () => {
      expect.assertions(1);
      try {
        await fetchData();
      } catch (e) {
        expect(e).toMatch('error');
      }
    });
    }

\

5、Dom测试

实现dom渲染测试,以及点击事件等交互功能测试。

describe('Dom测试', () => {
    it('测试按钮是否被渲染 ', () => {
        document.body.innerHTML = `
    <div>
        <button id='btn'>小按钮</button>
    </div> `
        console.log(document.getElementById('btn'), document.getElementById('btn').toString())
        expect(document.getElementById('btn')).not.toBeNull();
        expect(document.getElementById('btn').toString()).toBe("[object HTMLButtonElement]");
    });

    it('测试点击事件', () => {
        const onclick = jest.fn();
        document.body.innerHTML = `
        <div>
            <button id='btn'>小按钮</button>
        </div> `
        const btn = document.getElementById('btn');
        expect(onclick).not.toBeCalled();
        btn.onclick = onclick;
        btn.click();
        expect(onclick).toBeCalled();
        expect(onclick).toHaveBeenCalledTimes(1);
        btn.click();
        btn.click();
        expect(onclick).toHaveBeenCalledTimes(3);
    });
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值