(五)Jest测试异步代码


方法一:回调函数

这是非常常见的通用处理方式,比如你有一个fetchData(callback)的function用来获取数据,并且在获取完成的时候调用callback 函数,你想测试返回的数据是“peanut butter” ,默认情况下当fetchData执行完成的时候Jest的测试就完成了,这并不是你所期望的那样的去运行。

代码示例:fetechData.js文件代码

import axios from 'axios'
export const fetchData = (fn)=>{
  axios.get("http://www.192.168.0.188:8080/demo.json").then(response)=>{
     fn(response.data) //返回success:true    
  });      
}  

对应的测试用例fetechData.test.js文件代码

  test('test fetchData返回结果为{successs:data}',(done)=>{
  fetchData(data)=>{
    expect(data).toEqual({
      success:true
    })
    done();//回调函数,测试用例执行完成执行done
  }

   })

 

 方法一:使用Promise方法

   代码示例:fetechData.js文件代码

  export const fetchData=()=>{
     return axios.get('http://www.192.168.0.188:8080/demo.json');
  }

   对应的测试用例fetechData.test.js文件代码

  test('test fetchData返回结果为{successs:data}',()=>{
  return fetchData().then((response)=>{
    expect(response.data).toEqual({
      success:true
    })
  }

   })

   也可以修改为

test('test fetchData返回结果为{successs:data}',()=>{
	return expect(fetchData()).resolve.toMatchObject({
				data:{
					success:true
				}
			})	
})

   测试404错误,接口不存在时

test('test fetechData返回404',()=>{
	expect.assertion(1)//1表示expect执行个数
	return fetchData().catch(e=>{
		console.log('e',e);
		expect(e.toString().indexOf('404')>-1).toBe(true)
	})
})

    也可以修改为:

test('test fetechData返回404',()=>{
	return expect(fetchData()).rejects.toThrow();
})

  

第三种:使用 Async/Await

我相信大家最Async/Await 是比较熟悉的,你可以在测试中使用异步和等待。要编写一个async测试,只需在传递到测试的函数前面使用async关键字。例如上面同样的fetchData场景可以使用下面的实现:

//测试接口正常
test('test fetchData返回结果为{successs:data}',async ()=>{ await expect(fetchData()).resolve.toMatchObject({ data{ success:true } }) })

测试异常用例  

//测试404
test('test fetechData返回404',async ()=>{ await expect(fetchData()).rejects.toThrow(); })

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM