fetch-mock:没有为 POST 定义回退响应

fetch-mock: No fallback response defined for POST

我所有的 GET 请求都通过了,但是 POST 请求失败了。当我将 fetch-mock7.3.0 更新为 7.3.1 以后 .

时会发生这种情况

console.warn Unmatched POST to url

错误 fetch-mock: No fallback response defined for POST to url

http.js

export const get = (url) => {
  const options = {
    method: 'GET',
    credentials: 'same-origin'
  };

  return fetch(url, options).then(handleJsonResponse);
};

export const post = (url, body) => {
  const headers = {
    'content-type': 'application/json',
    'pragma': 'no-cache',
    'cache-control': 'no-cache'
  };

  return fetch(url, {
    credentials: 'same-origin',
    method: 'POST',
    cache: 'no-cache',
    body: JSON.stringify(body),
    headers
  }).then(handleJsonResponse);
};

http.spec.js

const url = '/path/to/url'

describe('get', () => {
    it('makes a GET request', async () => {
      fetchMock.mock({
        name: 'route',
        matcher: url,
        method: 'GET',
        credentials: 'same-origin',
        response: {
          status: 200,
          body: []
        }
      });

      const response = await get(url);

      expect(fetchMock.called()).toEqual(true);
      expect(fetchMock.calls().length).toEqual(1);
      expect(fetchMock.calls('route').length).toEqual(1);
      expect(response).toEqual([]);
    });
  });

  describe('post', () => {
    const requestBody = {request: 'request'};

    it('makes a POST request', async () => {
      fetchMock.mock({
        name: 'route',
        matcher: url,
        method: 'POST',
        credentials: 'same-origin',
        cache: 'no-cache',
        body: JSON.stringify(requestBody),
        headers: {
          'content-type': 'application/json',
          'pragma': 'no-cache',
          'cache-control': 'no-cache'
        },
        response: {
          status: 200,
          body: []
        }
      });

      const response = await post(url, requestBody);

      expect(fetchMock.called()).toEqual(true);
      expect(fetchMock.calls().length).toEqual(1);
      expect(fetchMock.calls('route').length).toEqual(1);
      expect(fetchMock.lastOptions().headers).toEqual({
        'content-type': 'application/json',
        'pragma': 'no-cache',
        'cache-control': 'no-cache'
      });
      expect(response).toEqual([]);
    });
  });

想知道是什么原因造成的吗?有没有办法获得更有意义的日志来帮助调试呢?

我宁愿不尝试 nockjest-fetch-mock.

的替代路径

好的,在深入研究库本身几个小时后,我发现了问题所在。

在我的代码(和上面的代码片段)中,我 字符串化 正文 JSON.stringify(body)。库的 generate-matcher.js 正在 解析 JSON.parse(body) 然后比较两者 - 导致失败的点。我现在只是将其作为原始对象发送。

以防以后有人在这里结束,我遇到了同样的错误 fetch-mock unmatched get

我看到了对 this issue filed to fetch-mock 的回复,这促使我仔细检查我的预期值和模拟值。

事实证明,我的问题与所描述的错误完全一样,因为打字错误,我期望的模拟路线和被调用的实际路线不匹配。