【问题标题】:Web Workers, Jasmine and Papa ParseWeb Workers、Jasmine 和 Papa Parse
【发布时间】:2020-01-22 14:14:06
【问题描述】:

我正在使用 PapaParse 解析用户传递的 CSV 文件。这是我的代码:

this.fileToUpload = files.item(0);
this.status = Status.Loading;
let batch = [];

this.papa.parse(this.fileToUpload, {
    worker: true,
    step: (row) => {
    if (batch.length === this.pageSize) {
        this.addBatch(batch, this.offset);
        this.offset += this.pageSize;
        batch = [];
    }
    batch.push({
        id: row.data[0],
        name: row.data[1],
        address: row.data[2]
    });
    },
    complete: (result) => {
    if (batch.length > 0) {
        this.addBatch(batch, this.offset);
        batch = [];
    }
    }
});

worker 字段表明文件应该使用网络工作者进行流式传输,但我认为如果你实现 step 方法,无论如何你都是在强制执行。它可以完美地查找和解析上传的 CSV。

我的问题在于使用 Jasmine 进行测试。我用 fakeAsync 设置了我的测试,我调用了所有需要调用的东西,我什至在测试中刷新并勾选了让异步代码继续,但是当我期待一个结果时,它总是说这个方法是用 Papa 的 step 方法调用的没有被调用。我正在检查是否正在调用 addBatch 方法,但根据 Karma,它不是。

  it('should upload a valid csv file', fakeAsync(() => {
    // given
    component.ngOnInit();
    spyOn(component, 'addBatch');
    const blob = new Blob(['12345,Example,FakeStreet\n54321,Example,FakeStreet'], { type: 'text/csv' });
    blob['lastModified'] = '';
    blob['name'] = 'filename.csv';
    const file = <File>blob;

    const fileList = {
      0: file,
      1: file,
      length: 2,
      item: (index: number) => file
    };
    // when
    component.addMerchants(fileList);
    flush();

    // then
    expect(component.addBatch).toHaveBeenCalled();
  }));

即使我在 step 方法中使用 console.log,它仍然会打印出来,这意味着它正在工作。

通过查看 Chrome 中的线程,当测试运行时,会在几毫秒内创建一个线程然后删除,所以我想那是爸爸。

我不知道网络工作者是否有单独的上下文?可能是因为它是在那里执行的,而不是在当前的 Karma 窗口中,所以它没有接听电话。

关于如何解决这个问题的任何想法,或任何其他测试方法?

【问题讨论】:

    标签: javascript angular jasmine papaparse


    【解决方案1】:

    没有异步工作正在进行,至少在主线程上没有,所以 NgZone 不是“不稳定的”。因此,出于所有意图和目的,测试认为它可以只调用expect 方法。

    您在这里实际上并不是在进行单元测试,而是在进行集成测试。如果你想进行单元测试,你应该模拟papa.parse,并让你的模拟根据你从单元测试中给出的任何输入来处理完整的调用。如果你真的想要,你可以使用setTimeout 来实现异步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 2022-09-27
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 2015-01-21
      相关资源
      最近更新 更多