Javascript 如何在Typescript中正确通过测试?

Javascript 如何在Typescript中正确通过测试?,javascript,typescript,jestjs,Javascript,Typescript,Jestjs,问题: 我正在尝试编写一个适合于以前编写的JEST测试的TypeScript函数。总共有5个测试。我编写的函数通过了所有测试,但不幸的是,我被要求在评论中再次编写。如何更有效地编写 示例案例: 设想一个包含文件夹的数组。这些文件夹中可以包含文件。move函数将文件移动到另一个文件夹,并返回给定列表的新状态 示例列表: 常数列表=[ { id:'1', 名称:“文件夹1”, 档案:[ {id:'2',name:'File 1'}, {id:'3',name:'File 2'}, {id:'4',

问题:

我正在尝试编写一个适合于以前编写的JEST测试的TypeScript函数。总共有5个测试。我编写的函数通过了所有测试,但不幸的是,我被要求在评论中再次编写。如何更有效地编写

示例案例: 设想一个包含文件夹的数组。这些文件夹中可以包含文件。move函数将文件移动到另一个文件夹,并返回给定列表的新状态

示例列表:


常数列表=[
{
id:'1',
名称:“文件夹1”,
档案:[
{id:'2',name:'File 1'},
{id:'3',name:'File 2'},
{id:'4',name:'File 3'},
{id:'5',name:'File 4'},
],
},
{
id:'6',
名称:“文件夹2”,
文件:[{id:'7',name:'File 5'}],
},
] 
如果我运行move(list,'4','6'),那么我希望id为4的文件被移动到id为6的文件夹中。函数应返回下面的新状态


常数结果=[
{
id:'1',
名称:“文件夹1”,
档案:[
{id:'2',name:'File 1'},
{id:'3',name:'File 2'},
{id:'5',name:'File 4'},
],
},
{
id:'6',
名称:“文件夹2”,
档案:[
{id:'7',name:'File 5'},
{id:'4',name:'File 3'},
],
},
]
move.ts

类型文件={
id:字符串;
名称:字符串;
};
类型文件夹={
id:字符串;
名称:字符串;
文件:文件[];
};
类型列表=文件夹[];
导出默认函数移动(列表:列表,源:字符串,目标:字符串):列表{
让sourceFileIndex=-1;
让sourceFolderIndex=-1;
设destinationFolderIndex=-1;
for(设i=0;i-1和&sourceFileIndex>-1)中断;
for(设j=0;j
move.spec.ts

从“/move”导入移动;
描述('move',()=>{
它('将给定文件移动到另一个文件夹',()=>{
常数列表=[
{
id:'1',
名称:“文件夹1”,
档案:[
{id:'2',name:'File 1'},
{id:'3',name:'File 2'},
{id:'4',name:'File 3'},
{id:'5',name:'File 4'},
],
},
{
id:'6',
名称:“文件夹2”,
文件:[{id:'7',name:'File 5'}],
},
];
常数结果=[
{
id:'1',
名称:“文件夹1”,
档案:[
{id:'2',name:'File 1'},
{id:'3',name:'File 2'},
{id:'5',name:'File 4'},
],
},
{
id:'6',
名称:“文件夹2”,
档案:[
{id:'7',name:'File 5'},
{id:'4',name:'File 3'},
],
},
];
expect(move(list,'4','6')).toStrictEqual(result);
});
它('如果给定源不是文件,则引发错误',()=>{
常数列表=[
{
id:'1',
名称:“文件夹1”,
文件:[{id:'2',名称:'File 1'}],
},
{id:'3',name:'Folder 2',files:[]},
];
expect(()=>move(list,'3','1')).toThrow('不能移动文件夹');
});
它('如果给定的目标不是文件夹,则引发错误',()=>{
常数列表=[
{
id:'1',
名称:“文件夹1”,
文件:[{id:'2',名称:'File 1'}],
},
{id:'3',name:'Folder 2',files:[{id:'4',name:'File 2'}]},
];
expect(()=>move(list,'2','4')).toThrow('不能将文件指定为目标');
});
它('如果找不到给定的源,则抛出错误',()=>{
常数列表=[
{
id:'1',
名称:“文件夹1”,
档案:[
{id:'2',name:'File 1'},
{id:'3',name:'File 2'},
{id:'4',name:'File 3'},
{id:'5',name:'File 4'},
],
},
{
id:'6',
名称:“文件夹2”,
文件:[{id:'7',name:'File 5'}],
},
];
expect(()=>move(list,'9','6')).toThrow(
'在任何文件夹中都找不到给定的文件源id',
);
});
它('如果找不到给定的目标,则抛出错误',()=>{
常数列表=[
{
id:'1',
名称:“文件夹1”,
档案:[
{id:'2',name:'File 1'},
{id:'3',name:'File 2'},
{id:'4',name:'File 3'},
{id:'5',name:'File 4'},
],
},
{
id:'6',
名称:“文件夹2”,
文件:[{id:'7',name:'File 5'}],
},
];
expect(()=>move(list,'4','9')).toThrow('给定的目标id与任何文件夹都不匹配');
});
});

正如我所说,它通过了5次测试,但没有被接受。问题出在哪里?

这个问题更适合CodeReview stackoverflow。他们很可能希望整个事情是不可变的,并且不喜欢代码中的破坏性操作
push
splice