Jest 响应式异步测试

60 阅读1分钟

各种单测比较

image.png

yarn install jest -g
jest --inti // 初始化的时候选择模块 选择 jsdom, 不要选 Node

当单测的时候 moudle 找不到情况可以设置 jest.config.js 文件,

 moduleNameMapper: {
    // 'absolute-path': 'relative-path'
    'src/(.*)': '<rootDir>/src/$1',
   },

Jest 响应式异步测试 a.test.ts, 回调方式测试需手动执行 done 函数才开始测试

//运行
jest a.test.ts

模糊匹配

test('浮点数相加', () => { var value = 0.1 + 0.2; expect(value).toBeCloseTo(0.3); // 通过});

异步调用测试

jest.setTimeout(30000);
//嵌套结构 可多层嵌套
describe("异步调用测试", ()=> {
    test("callback", (done) => {
        function callback(error, data){
            if(error){
                done(error);
                return;
            }
            try{
                expect(data).toBe({price:21});
                // done 的回调执行后才会开始测试
                done();
            }catch(error){
                done(error);
            }
        }
        fetchData(callback)
    });
    test("then", ()=>{
        return fetchData().then((data)=>{
            expect(data).toBe({price:21})
        })
    })
    test("await", async()=>{
        var data = await fetchData();
        expect(data).toBe({price:21})
    })

    test("mock", ()=>{
        const myMock = jest.fn();
        console.log(myMock());
        myMock.mockReturnValueOnce(10).mockReturnValueOnce("x").mockReturnValueOnce(true);
        console.log(myMock(), myMock())
        expect(myMock()).toBe(true)
    })

    test("mock random", ()=>{
        const myMock = jest.fn();
        // console.log(myMock());
        myMock.mockReturnValueOnce(true).mockReturnValueOnce(true);
        const result = [11, 12].filter((num) => myMock(num))
        console.log(result);
        console.log(myMock.mock.calls[0][0])
        // console.log(myMock.mock.calls[1][0])

        // console.log(myMock(), myMock())
        expect(myMock.mock.calls[1][0]).toBe(12)
    })
    // test
})

const fetchData = async (callback?:any) => {
    return new Promise((resolve) => {
        setTimeout(() => {
          resolve({price:21});
          callback?.(null, {price:21})
        }, 400);
      });
}