我有一些代码如下:
/* 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对这两种方法进行单元测试,但我不知道从哪里开始。任何帮助将不胜感激。
答案 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")
);
// ...
}