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

zhu*_*han 5 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);
};
Run Code Online (Sandbox Code Playgroud)

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

And*_*rle 10

我会FileSaver用间谍嘲笑:

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

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

global.Blob = function (content, options){return  ({content, options})}
Run Code Online (Sandbox Code Playgroud)

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

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