使用Fetch-Mock返回测试Blob

时间:2018-10-10 20:29:59

标签: javascript fetch-mock

我有一个从服务器接收文件的抓取操作,我正在尝试使用fetch-mock模拟该抓取操作以进行测试。
使用此代码,我可以模拟端点并将blob放置在主体中:

const blob = new Blob(['a', 'b', 'c', 'd']);
fetchMock.once('*', {body: blob}, {sendAsJson: false});

正在测试的代码是:

fetch(url).then( ( response ) => {
            console.log(response);
            return response.blob();
        } ).then( ( blob ) => {
            console.log(blob);
        } )

我可以看到Blob位于请求的正文中

Body {
    url: '/mock/url',
    status: 200,
    statusText: 'OK',
    headers: Headers { _headers: {} },
    ok: true,
    body: Blob {},
    bodyUsed: false,
    size: 0,
    timeout: 0,
    _raw: [],
    _abort: false }

但是运行测试会引发错误:

    TypeError: response.blob is not a function

在服务器上运行代码会将有效的Blob返回到最后的.then

1 个答案:

答案 0 :(得分:1)

因此解决方案是fetch-mocknode-fetch有对等项依赖关系,这在玩笑测试期间会使用。我有一个较旧版本的node-fetch被另一个库引入。

因此直接要求我的node-fetch中的最新package.json解决了此问题。