如何使用Jest测试文件下载?

时间:2017-06-21 20:53:00

标签: unit-testing jestjs filesaver.js

我有一些代码如下:

/* global document */
/* global window */
/* global Blob */

import FileSaver from 'file-saver';

export const createDownloadFromBlob = (blob, filename, extension) => {
  FileSaver.saveAs(blob, `${filename}.${extension}`);
};

export const createDownload = (content, filename, extension) => {
  createDownloadFromBlob(new Blob([content], { type: 'application/octet-stream' }), filename, extension);
};

我想用Jest对这两种方法进行单元测试,但我不知道从哪里开始。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:7)

我会用间谍嘲笑FileSaver

import FileSaver from 'file-saver';
jest.mock('file-saver', ()=>({saveAs: jest.fn()}))

由于你无法比较Blob,我也会嘲笑它:

global.Blob = function (content, options){return  ({content, options})}

现在你可以运行你的测试并使用期望像这样

createDownload('content', 'filename', 'extension')
expect(FileSaver.saveAs).toHaveBeenCalledWith(
  {content:'content', options: { type: 'application/octet-stream' }}, 
  'filename.extension'
)

答案 1 :(得分:0)

Typescript 中:如果使用ArrayBuffer或二进制数据创建Blob,则需要与字符串分开处理这种情况。

int main() {
  // ...
  emscripten::val::global("window").call<void>(
    "offerFileAsDownload",
    string("filename.ext"),
    string("mime/type")
  );
  // ...
}