这个问题似乎是相同的,但绝对不是重复的。
在我的一个函数中,我正在调用this.cordovaFile.readAsArrayBuffer(this.cordovaFile.dataDirectory, key)
这cordovafile.readAsArrayBuffer()
从 ipad 文件存储中读取数据,但在单元测试中我不能这样做,因为它在浏览器中运行,所以我使用 SpyOn 来获取假值,我很难做到这一点。
下面有人可以帮我吗?
private getTimesheetByKey(key: TIMESHEET_KEYS): Observable<TimesheetModel> {
let timesheet: TimesheetModel;
return from(
this.cordovaFile
.readAsArrayBuffer(this.cordovaFile.dataDirectory, key)
.then(compressedConfirmation => {
const start = moment();
const uint8Array = new Uint8Array(compressedConfirmation);
const jsonTimeSheet = this.LZString.decompressFromUint8Array(uint8Array);
timesheet = new TimesheetModelFromJson(<JsonTimesheetModel>(
JSON.parse(jsonTimeSheet)
));
this.saveTimesheetByKey(key, timesheet);
return timesheet;
})
.catch((error: Error) => {})
);
}
这就是我要编写的单元测试的方式,我不知道如何 SpyOnthis.cordovaFile.readAsArrayBuffer(this.cordovaFile.dataDirectory, key)
并返回值
it('should save the Timesheet to file storage', () => {
spyOn(LocalStorageTimesheetService, 'getTimesheetByKey')
.and.callThrough(cordovaFile.readAsArrayBuffer())
.and.returnValue(timesheet);
expect(timesheet).toEqual();
});
this.cordovaFile.readAsArrayBuffer()
应该返回类似下面的假值
timesheet = {
startOfWork: '2019-07-02T02:00:00.000Z',
notifications: [],
additionalExpenses: [],
manualTimesheetEntries: [],
endOfWork: undefined,
isSubmitted: false,
attendanceType: 'FREE',
};