【发布时间】:2021-04-28 10:40:13
【问题描述】:
我想在given stackblitz 代码的app.service.ts 中为downloadFile() 和ConvertToCSV() 方法编写测试用例。请找到参考here
import { Injectable } from '@angular/core';
@Injectable()
export class AppService {
downloadFile(data, filename='data') {
let csvData = this.ConvertToCSV(data, ['name','age', 'average', 'approved', 'description']);
console.log(csvData)
let blob = new Blob(['\ufeff' + csvData], { type: 'text/csv;charset=utf-8;' });
let dwldLink = document.createElement("a");
let url = URL.createObjectURL(blob);
let isSafariBrowser = navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1;
if (isSafariBrowser) { //if Safari open in new window to save file with random filename.
dwldLink.setAttribute("target", "_blank");
}
dwldLink.setAttribute("href", url);
dwldLink.setAttribute("download", filename + ".csv");
dwldLink.style.visibility = "hidden";
document.body.appendChild(dwldLink);
dwldLink.click();
document.body.removeChild(dwldLink);
}
ConvertToCSV(objArray, headerList) {
let array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
let str = '';
let row = 'S.No,';
for (let index in headerList) {
row += headerList[index] + ',';
}
row = row.slice(0, -1);
str += row + '\r\n';
for (let i = 0; i < array.length; i++) {
let line = (i+1)+'';
for (let index in headerList) {
let head = headerList[index];
line += ',' + array[i][head];
}
str += line + '\r\n';
}
return str;
}
}
我将在 app.component.html 中有一个 Export to CSV 按钮,点击该按钮时应执行 app 的 download() 方法。 component.ts 使用 AppService
downloadFile()
app.component.ts
import { Component } from '@angular/core';
import { AppService } from './app.service';
@Component({
...
})
export class AppComponent {
constructor(private appService:AppService) { }
jsonData = [
...
];
download(){
this.appService.downloadFile(this.jsonData, 'jsontocsv');
}
}
【问题讨论】:
-
代码覆盖率需要90%以上
-
请将
downloadFile()和ConvertToCSV()的代码贴在问题正文中 -
@MichaelRovinsky 已添加!
标签: angular unit-testing karma-jasmine