Javascript 如何使用Jest测试Json.parse
我是个新手,我正在尝试测试异步等待。我试图介绍Json.Parse,它抛出了一个异常,如下所述 错误消息Javascript 如何使用Jest测试Json.parse,javascript,typescript,jestjs,ts-jest,Javascript,Typescript,Jestjs,Ts Jest,我是个新手,我正在尝试测试异步等待。我试图介绍Json.Parse,它抛出了一个异常,如下所述 错误消息 SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse (<anonymous>) 模拟数据 public get dataSourceServiceMock(): any = { return { myPromiseMethod: function () { r
SyntaxError: Unexpected token o in JSON at position 1
at JSON.parse (<anonymous>)
模拟数据
public get dataSourceServiceMock(): any = {
return {
myPromiseMethod: function () {
return Promise.resolve({
selectedOrder: {
earlierStartTime: '2/5/2020',
__id: 'orderId123'
},
Collection: [{
__id: 'b1order 1',
resName: 'New recipe_V1.0',
plannedQuantity: '3',
resId: 'ns=6;s=4/ProjectData/1',
actualQuantity: '1',
description: 'batchDesc',
}]
});
}
}
}
测试套件
public async callDataSourceCommand(dialogData: any, RecipeId: string) {
const gridItems = await this.dataSourceService.myPromiseMethod(id, collection);
this.updateGrid(JSON.parse(gridItems));
}
private updateGrid(gridItems: any) {}
it('1. Should execute ', async() => {
const myDialogApp: DialogApp = TestBed.get(DialogApp);
myDialogApp.selectedOrder = selectedOrder;
myDialogApp.RecipeId = Recipe.__id;
jest.spyOn(dataSourceServiceMock, 'myPromiseMethod');
await myDialogApp.callDataSourceCommand(dialogData, RecipeId);
expect(dataSourceServiceMock.myPromiseMethod).toHaveBeenCalled();
});
那么,您可以简单地将响应存根并按如下方式传递它
public get dataSourceServiceMock(): any = {
return {
myPromiseMethod: function () {
return Promise.resolve(JSON.stringify({
selectedOrder: {
earlierStartTime: '2/5/2020',
__id: 'orderId123'
},
Collection: [{
__id: 'b1order 1',
resName: 'New recipe_V1.0',
plannedQuantity: '3',
resId: 'ns=6;s=4/ProjectData/1',
actualQuantity: '1',
description: 'batchDesc',
}]
}));
}
}
}
希望这有帮助 以下是单元测试解决方案:
index.ts
:
类服务{
私有数据源服务;
构造函数(数据源服务){
this.dataSourceService=dataSourceService;
}
公共异步callDataSourceCommand(dialogData:any,RecipeId:string){
常量id='1';
常量集合=[];
const gridItems=wait this.dataSourceService.mypromisethod(id,collection);
this.updateGrid(JSON.parse(gridItems));
}
私有updateGrid(gridItems:any){}
}
出口{服务};
datasourceService.ts
:
类数据源服务{
公共myPromiseMethod(id,集合){
返回JSON.stringify({});
}
}
导出{DataSourceService};
index.test.ts
:
从“/”导入{Service};
描述('60446313',()=>{
它('should pass',async()=>{
const gridItemsMock=JSON.stringify({
所选顺序:{
早期开始时间:“2020年2月5日”,
__id:'orderId123',
},
收藏:[
{
__id:'B11订单',
resName:“新配方1.0版”,
计划数量:“3”,
resId:'ns=6;s=4/ProjectData/1',
实际数量:“1”,
描述:“batchDesc”,
},
],
});
常量数据源服务锁={
myPromiseMethod:jest.fn().mockResolvedValueOnce(gridItemsMock),
};
const parseSpy=jest.spyOn(JSON,'parse');
const service=新服务(dataSourceServiceMock);
wait service.callDataSourceCommand('dialogData','1');
expect(datasourceservicecemock.mypromisethod).toBeCalledWith('1',[]);
expect(parseSpy).toBeCalledWith(gridItemsMock);
});
});
单元测试结果和覆盖率报告:
PASS stackoverflow/60446313/index.test.ts
60446313
✓ 应通过(9ms)
----------|---------|----------|---------|---------|-------------------
文件|%Stmts |%Branch |%Funcs |%Line |未覆盖行|s
----------|---------|----------|---------|---------|-------------------
所有文件| 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
----------|---------|----------|---------|---------|-------------------
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:4.509秒,估计6秒