fetch-mock:没有为 POST 定义回退响应
fetch-mock: No fallback response defined for POST
我所有的 GET 请求都通过了,但是 POST 请求失败了。当我将 fetch-mock
从 7.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([]);
});
});
想知道是什么原因造成的吗?有没有办法获得更有意义的日志来帮助调试呢?
我宁愿不尝试 nock 或 jest-fetch-mock.
的替代路径
好的,在深入研究库本身几个小时后,我发现了问题所在。
在我的代码(和上面的代码片段)中,我 字符串化 正文 JSON.stringify(body)
。库的 generate-matcher.js
正在 解析 它 JSON.parse(body)
然后比较两者 - 导致失败的点。我现在只是将其作为原始对象发送。
以防以后有人在这里结束,我遇到了同样的错误 fetch-mock unmatched get
。
我看到了对 this issue filed to fetch-mock 的回复,这促使我仔细检查我的预期值和模拟值。
事实证明,我的问题与所描述的错误完全一样,因为打字错误,我期望的模拟路线和被调用的实际路线不匹配。
我所有的 GET 请求都通过了,但是 POST 请求失败了。当我将 fetch-mock
从 7.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([]);
});
});
想知道是什么原因造成的吗?有没有办法获得更有意义的日志来帮助调试呢?
我宁愿不尝试 nock 或 jest-fetch-mock.
的替代路径好的,在深入研究库本身几个小时后,我发现了问题所在。
在我的代码(和上面的代码片段)中,我 字符串化 正文 JSON.stringify(body)
。库的 generate-matcher.js
正在 解析 它 JSON.parse(body)
然后比较两者 - 导致失败的点。我现在只是将其作为原始对象发送。
以防以后有人在这里结束,我遇到了同样的错误 fetch-mock unmatched get
。
我看到了对 this issue filed to fetch-mock 的回复,这促使我仔细检查我的预期值和模拟值。
事实证明,我的问题与所描述的错误完全一样,因为打字错误,我期望的模拟路线和被调用的实际路线不匹配。