【问题标题】:How to test FileReader wrapped inside promise?如何测试包裹在 Promise 中的 FileReader?
【发布时间】:2020-09-16 15:57:01
【问题描述】:

当前代码:

export const readFilePromise = file => {
  return new Promise((resolve, reject) => {
    let reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => {
      resolve(reader.result);
    };
    reader.onerror = error => {
      reject(error);
    };
  });
};

我可以测试 onload 方法

it('readFilePromise method', async () => {
    const fileContentsEncodedInHex = [
      '\x45\x6e\x63\x6f\x64\x65\x49\x6e\x48\x65\x78\x42\x65\x63\x61\x75\x73\x65\x42\x69\x6e\x61\x72\x79\x46\x69\x6c\x65\x73\x43\x6f\x6e\x74\x61\x69\x6e\x55\x6e\x70\x72\x69\x6e\x74\x61\x62\x6c\x65\x43\x68\x61\x72\x61\x63\x74\x65\x72\x73'
    ];
    const blob = new Blob(fileContentsEncodedInHex);
    const result = readFilePromise(blob);
    const output = await result;
    const expectedOutput =
      'data:;base64,RW5jb2RlSW5IZXhCZWNhdXNlQmluYXJ5RmlsZXNDb250YWluVW5wcmludGFibGVDaGFyYWN0ZXJz';
    expect(output).toEqual(expectedOutput);
  });

我想知道如何测试onerror

【问题讨论】:

    标签: testing promise mocking jestjs filereader


    【解决方案1】:

    如果您因为this而出现以下类似情况

    reader.onerror = () => {
      reject(reader.error);
    };
    

    那么下面应该可以工作了。

    只需事先知道传递空文件的错误消息或什么都没有。我只是想创建一个场景

     describe('Error Case', () => {
            it('should return error message for empty file', () => {
                  const result = readFilePromise();
                   const n = () => {};
                   return result.then(n, (errorMessage) => {
                    expect('your error message here').to.equal(errorMessage);
                });
            });
    

    【讨论】:

    • 嗨,当前的问题是 reader.readAsDataURL(file),在到达 reader.onerror 之前失败。错误未将 Blob 传递给 readAsDataURL
    • 您好,我根据您关于如何测试 onerror 的原始问题进行了回答。根据提供的信息,很难说出reader.readAsDataURL(file) 失败的原因。
    猜你喜欢
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 2019-11-21
    • 1970-01-01
    相关资源
    最近更新 更多