簡體   English   中英

如何在Angular單元測試Jasmine / Karma中創建ArrayBuffer變量

[英]How to create an ArrayBuffer Variable in Angular unit test, Jasmine/Karma

嗨,我有一個功能,可以下載來自后端的Excel文件

component.ts

 getExcelExport(resultsFilterRootObject: ResultsFilterRootObject) {
    return this.http.post(urls.getExcelExportCPPMetrics , resultsFilterRootObject, {
      responseType: 'arraybuffer',
      observe: 'response'
    })
      .pipe(
        tap(
          data => {
            const blob = new Blob([data.body], {type: 'application/vnd.ms-excel'});
            const filename = 'vehicle-metrics-template.xls';
            FileSaver.saveAs(blob, filename);
          },
          catchError(MetricsService.handleError)
        )
      );
  }

component.spec.ts

  it('should download Excel ', () => {

  //  const expectedResult: ArrayBuffer = new ArrayBuffer(8); Tried this fails too
    const expectedResult = new TextEncoder();
    expectedResult.encode("This is a string converted to a Uint8Array");

    httpClientSpy.post.and.returnValue(asyncData(expectedResult));

    metricsService.getExcelExportCPPMetrics(resultsFilterRootObject).subscribe(
      heroes => expect(heroes).toEqual(expectedResult, 'expected VehicleSalesResultRootObject'),
      fail
    );
    expect(httpClientSpy.post.calls.count()).toBe(1, 'one call');
  });

我不斷收到錯誤錯誤TS2345:類型'TextEncoder'的參數不能分配給類型'Expected<HttpResponse<ArrayBuffer>>'.

Type 'TextEncoder' is missing the following properties from type 'ObjectContaining<HttpResponse<ArrayBuffer>>': jasmineMatches, jasmineToString

基本上,如果我可以在單元測試中創建ArrayBuffer類型的變量,則將解決此問題

有什么想法嗎?

請注意,帶有參數responseType: 'arraybuffer' post方法並observe: 'response'返回值Observable<HttpResponse<ArrayBuffer>> ,它不是直接提供給ArrayBuffer

post(url: string, body: any | null, options: {
    headers?: HttpHeaders | {
        [header: string]: string | string[];
    };
    observe: 'response';
    params?: HttpParams | {
        [param: string]: string | string[];
    };
    reportProgress?: boolean;
    responseType: 'arraybuffer';
    withCredentials?: boolean;
}): Observable<HttpResponse<ArrayBuffer>>;

你可以做的是返回Observable與簡單的對象有您使用哪個屬性- body

  it('should download Excel ', () => {
    const expectedResult: ArrayBuffer = new ArrayBuffer(8);
    // httpClientSpy.post.and.returnValue(asyncData(expectedResult));
    httpClientSpy.post.and.returnValue(of({body: expectedResult})); // Or that below one if "asyncData" return Observable

    metricsService.getExcelExportCPPMetrics(resultsFilterRootObject).subscribe(
      data => expect(data.body).toEqual(expectedResult, 'expected VehicleSalesResultRootObject'),
      fail
    );
    expect(httpClientSpy.post.calls.count()).toBe(1, 'one call');
  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM