首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web Workers、Jasmine和Papa Parse

Web Workers、Jasmine和Papa Parse
EN

Stack Overflow用户
提问于 2020-01-22 22:14:07
回答 1查看 409关注 0票数 1

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

代码语言:javascript
复制
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字段指示文件应该使用web worker进行流式传输,但我认为如果您实现了step方法,您无论如何都是在强制执行该方法。它可以完美地查找和解析上传的CSV。

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

代码语言:javascript
复制
  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();
  }));

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

从Chrome中的线程来看,当测试运行时,有几毫秒的时间会创建一个线程,然后将其删除,所以我可以想象这就是爸爸。

我不知道网络工作者是否有单独的背景?也许是因为它是在那里执行的,而不是在当前的Karma窗口中,它没有接听调用。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-22 22:22:03

没有异步工作在进行,至少在主线程上没有,所以NgZone不是“不稳定的”。因此,无论出于何种目的,测试都认为它可以直接调用expect方法。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59861663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档