jest测试(三)

2-7 异步代码的测试方法

有两种方式,一种是传回调函数的方式(这种方式要通过done来完成);一种是返回Promise的方式,这种方式一定记得return

  1. fetchData.js
import axios from 'axios';

export const fetchData = (fn) => {
   axios.get('http://www.test.com/react/api/demo.json').then(res => {
       fn(res.data);
   })
}

export const fetchData1 = () => {
   return axios.get('http://www.test.com/react/api/demo.json');
}
  1. fetchData.test.js
import { fetchData , fetchData1 } from './fetchData';
// 回调类型的异步函数的测试
test('fetchData 返回结果为 { success: true}', (done) => {
    fetchData((data) => {
        expect(data).toEqual({
            success: true
        })
        done();
    })
})

test('fetchData1 返回结果为 { success: true}', () => {
    return fetchData1().then(res => {
        expect(res.data).toEqual({
            success: true
        })
    })
}); 

test('fetchData1 返回结果为 { success: true}', () => {
    //如果要用catch必须加一行下面这代码
    expect.assertions(1); //必须执行一下expect
    return fetchData1().catch( e => {
        expect(e.toString().indexOf('404')> -1).toBe(true)
    })
});

Jest中的钩子函数

beforeAll() 在测试用例执行之前先执行
afterAll() 在测试用例执行完之后再执行
beforeEach() 在某一个测试用例执行之前都会先执行这个钩子函数
afterEach()

如果测试用例比较多,比如一堆测试加法的,一堆测试减法的,那么我们就可以分组,通过describe()来实现。

其实也可以理解所有测试最外层默认包裹了一层describe

describe('测试加法', ()=>{
   test('测试addOne方法', () => {
       expect(counter.addOne(1)).toBe(1);
   })
})
describe('测试减法', () => {
   test('测试minusOne', () => {
       expect(counter.minusOne(1)).toBe(0);
   })
})

在这里插入图片描述

2-10钩子函数的作用域

在describe内部和外部都可以写钩子函数,外部的先执行然后执行内部的

import Counter from './Counter'

// const counter = new Counter();
let counter = null;
beforeAll(() => {
    console.log('我是外部的钩子函数');
    counter = new Counter();
})
describe('测试加法', () => {
    beforeAll(() => {
        console.log('我是内部的钩子函数')
    })
    test('测试addOne方法', () => {
        expect(counter.addOne(1)).toBe(1);
    })
})
describe('测试减法', () => {
    test('测试minusOne', () => {
        expect(counter.minusOne(1)).toBe(0);
    })
})

在这里插入图片描述

如果测试用例比较多,而我们已经定位到其中一个测试用例有问题,那么我们可以单独的输出这个测试用例的结果,即test.only()

import Counter from './Counter'

// const counter = new Counter();
let counter = null;
beforeAll(() => {
    console.log('我是外部的钩子函数');
    counter = new Counter();
})
describe('测试加法', () => {
    beforeAll(() => {
        console.log('我是内部的钩子函数')
    })
    test.only('测试addOne方法', () => {
        expect(counter.addOne(1)).toBe(1);
    })
})
describe('测试减法', () => {
    test('测试minusOne', () => {
        expect(counter.minusOne(1)).toBe(0);
    })
})

在这里插入图片描述

describe里的执行顺序

先执行describe里的,然后再执行每个describe里的钩子函数和测试用例。因为钩子函数是在测试用例执行前或执行后执行的

import Counter from './Counter'

// const counter = new Counter();
let counter = null;
beforeAll(() => {
    console.log('我是外部的钩子函数');
    counter = new Counter();
})
describe('测试加法', () => {
    console.log('descrbe 1');
    beforeAll(() => {
        console.log('我是内部的钩子函数')
    })
    test('测试addOne方法', () => {
        expect(counter.addOne(1)).toBe(1);
    })
})
describe('测试减法', () => {
    console.log('describe 2');
    test('测试minusOne', () => {
        expect(counter.minusOne(1)).toBe(0);
    })
})

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

. . . . .

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值