【发布时间】:2021-03-29 01:12:09
【问题描述】:
我是单元测试的初学者,我想测试我的打字稿方法 onSelect,它允许用户仅选择图像、pdf 和 word 文件。这是我的打字稿方法:
addedfiles : Array<any> = [];
fileRestrictions: FileRestrictions = {
allowedExtensions: ['.jpg', '.png', '.jpeg', '.doc', '.docx','.pdf'],
maxFileSize: 5000000
};
public onSelect(ev: any): void {
ev.files.forEach((file: FileInfo) => {
if (file.rawFile) {
const reader = new FileReader();
if(this.fileRestrictions.allowedExtensions.includes(file.extension.toLowerCase()))
{reader.onloadend = () => {
this.addedfiles.push({ ...file, src: reader.result as string });
};
reader.readAsDataURL(file.rawFile);
console.log(this.addedfiles)
}
}
});
}
我想编写一个单元测试来测试此方法是否允许用户选择 png 文件。所以我创建了这个单元测试:
it('should select a png file', () => {
const ev = { prevented : false , files : [{uid : '01', name : 'filename', extension : 'png'
, size : 123000 }]};
component.onSelect(ev);
expect(component.addedfiles.length).toEqual(1);
})
它给了我错误:Expected 0 to equal 1!谁能帮帮我?
【问题讨论】:
-
嗨,我看到有人检查了
file.rawFile。在单元测试中,您没有该设置。试试这个为ev?const ev = { prevented : false, files : [{uid : '01', name : 'filename', extension : 'png', size : 123000, rawFile: true }]};或者更适合 rawFile 的值 :) -
@user3009269 不,它仍然是同样的问题,PS:当我在我的 onSelect 方法中 console.log(addedfiles) 并选择一个 png 文件时它工作正常并且 addefiles 不为空!所以可能单元测试不正确
-
我对@987654326@ 不太熟悉,但也许这在您的单元测试中作为
rawFile的模拟值更有意义:data:image/png;base64,AAAFBfj42Pj4。 -
Hmmm...我认为问题实际上是文件是在异步方法
onloadend中添加的文件中添加的事实...所以您的单元测试在@987654330之前达到了预期功能@回调被执行...
标签: angular typescript unit-testing karma-runner