开玩笑地模拟获取响应的 blob 的 fetch() 函数

Posted

技术标签:

【中文标题】开玩笑地模拟获取响应的 blob 的 fetch() 函数【英文标题】:Jest mocking fetch() function that get the blob of the response 【发布时间】:2019-12-19 15:06:17 【问题描述】:

我想通过 使用 jest.fn().mockimplementation()不使用 fetch-mock 或 jest-fetch-mock 来模拟 fetch 函数

fetch(url)
.then((response) => response.blob)
.then((data) => imageHandler(data))

【问题讨论】:

【参考方案1】:

这是解决方案,我使用jest.mock() 模拟node-fetch 模块。

import fetch from 'node-fetch';

function fetchBlobImage() 
  const url = '';
  return fetch(url)
    .then(response => response.blob)
    .then(blob => processImage(blob));


function processImage(blob) 
  return JSON.stringify(blob);


export  fetchBlobImage ;

单元测试:

import  fetchBlobImage  from './';

jest.mock('node-fetch', () => 
  const context = 
    then: jest.fn().mockImplementationOnce(() => 
      const blob = ;
      const response =  blob ;
      return Promise.resolve(response);
    )
  ;
  return jest.fn(() => context);
);

describe('node-fetch', () => 
  it('should be mock correctly', async () => 
    const actualValue = await fetchBlobImage();
    expect(actualValue).toBe(JSON.stringify( blob:  ));
  );
);

测试结果:

 PASS  src/mock-module/node-fetch/index.spec.ts
  node-fetch
    ✓ should be mock correctly (5ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        2.25s, estimated 3s

【讨论】:

以上是关于开玩笑地模拟获取响应的 blob 的 fetch() 函数的主要内容,如果未能解决你的问题,请参考以下文章

Javascript - 如何知道Fetch API中的响应类型?

开玩笑地从模拟文件中窥探模拟函数

如何开玩笑地模拟 VueAxios

开玩笑地模拟“this”对象上的方法

如何开玩笑地模拟文件夹中的所有文件

React-native-track-player 无法播放由 rn-fetch-blob 获取的本地文件