测试一个可变范围的范围,其范围在JavaScript中的函数内

时间:2017-01-22 12:17:52

标签: javascript angularjs jasmine

我使用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();。有没有其他方法来模拟图书馆或拦截它?

1 个答案:

答案 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());
    });
});