我使用Jasmine
对我的离子应用进行单元测试。我有一个服务函数来处理文件上传。
fileUpload(filePath: string,apiEndpoint: string){
const fileTransfer = new Transfer();
let fileName = filePath.substr(filePath.lastIndexOf('/') + 1);
let options = Object.assign( this.httpHeader(),{chunkedMode: false, fileName: fileName});
return fileTransfer.upload(filePath, apiEndpoint, options)
.then((data) => {
return data;
}).catch(this.handleError);
}
fileTransfer
的范围在函数内部,因此在测试中不可用。fileTransfer.upload
调用将在函数内部失败,因为它是cordova
库。
it('updateImage updates the image of user',(done)=>{
auth.fileUpload("path","url").then((data)=>{
done();
})
})
我能想到的一个可能的解决方案是this.fileTransfer = new Transfer();
。有没有其他方法来模拟图书馆或拦截它?
答案 0 :(得分:0)
我在没有运行它的情况下写了这个,但这些内容可能是你需要的开始;
describe('updateImage', () => {
beforeEach(() => {
spyOn(window, 'Transfer').and.returnValue({
upload: jasmine.createSpy('fileTransfer.upload').and.returnValue(
Promise.resolve({
the: 'data that fileTransfer.upload returns'
})
)
});
});
afterEach(() => {
window.Transfer.reset();
});
it('updateImage updates the image of user', done => {
auth.fileUpload("path", "url").then(data => done());
});
});