如何使用Jest测试文件下载?
How to use Jest to test file download?
我有一些代码如下:
/* 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对这两个方法进行单元测试,但不知从何下手。任何帮助将不胜感激。
我会用间谍模拟 FileSaver
:
import FileSaver from 'file-saver';
jest.mock('file-saver', ()=>({saveAs: jest.fn()}))
因为你不能比较 Blob,我也会嘲笑这个:
global.Blob = function (content, options){return ({content, options})}
现在您可以 运行 您的测试并像这样使用 expect
createDownload('content', 'filename', 'extension')
expect(FileSaver.saveAs).toHaveBeenCalledWith(
{content:'content', options: { type: 'application/octet-stream' }},
'filename.extension'
)
在 Typescript 中:如果您使用 ArrayBuffer 或二进制数据创建 Blob,那么您需要将这种情况与字符串分开处理。
import * as CRC32 from 'crc-32';
(window as any).global.Blob = function(content, options) {
// for xlxs blob testing just return the CRC of the ArrayBuffer
// and not the actual content of it.
if (typeof content[0] !== 'string') {
content = CRC32.buf(content);
}
return {content: JSON.stringify(content), options};
};
我有一些代码如下:
/* 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对这两个方法进行单元测试,但不知从何下手。任何帮助将不胜感激。
我会用间谍模拟 FileSaver
:
import FileSaver from 'file-saver';
jest.mock('file-saver', ()=>({saveAs: jest.fn()}))
因为你不能比较 Blob,我也会嘲笑这个:
global.Blob = function (content, options){return ({content, options})}
现在您可以 运行 您的测试并像这样使用 expect
createDownload('content', 'filename', 'extension')
expect(FileSaver.saveAs).toHaveBeenCalledWith(
{content:'content', options: { type: 'application/octet-stream' }},
'filename.extension'
)
在 Typescript 中:如果您使用 ArrayBuffer 或二进制数据创建 Blob,那么您需要将这种情况与字符串分开处理。
import * as CRC32 from 'crc-32';
(window as any).global.Blob = function(content, options) {
// for xlxs blob testing just return the CRC of the ArrayBuffer
// and not the actual content of it.
if (typeof content[0] !== 'string') {
content = CRC32.buf(content);
}
return {content: JSON.stringify(content), options};
};