2017-01-22 200 views
0

我使用Jasmine對我的離子應用進行了單元測試。我有一個服務函數來處理文件上傳。測試範圍在JavaScript中的函數的範圍內的虛擬範圍

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

我已經寫了這個沒有運行它,但沿着這些線的東西可能是你需要的開始;

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()); 
    }); 
}); 
+0

我得到這個錯誤''錯誤::轉讓()方法不存在從'' – raj

+0

你在哪裏找到'Transfer'?不是全球? –

+0

我有我的服務,我正在測試。 ''從'離子本土'導入{Transfer}; '' – raj