@testing-library/与 msw/node 反应; window.fetch 未在 POST 上返回正文
Posted
技术标签:
【中文标题】@testing-library/与 msw/node 反应; window.fetch 未在 POST 上返回正文【英文标题】:@testing-library/react with msw/node; window.fetch not returning body on POST 【发布时间】:2021-06-27 23:39:35 【问题描述】:我使用 create-react-app 创建了一个简单的应用程序。我现在正在尝试使用 @testing-library 和 Mock Service Worker 编写一些自动化测试用例。由于我不知道的原因,当我使用 Window.fetch(或仅获取)POST 请求时,不会返回响应的正文。
我正在使用以下依赖项:
"@testing-library/react": "^11.2.5",
"@testing-library/user-event": "^12.7.1",
"msw": "^0.28.0",
"react": "^17.0.1"
我有以下测试:
import rest from 'msw';
import setupServer from 'msw/node';
const MOCKED_URL = 'http://mock.example.net:8080/foo'
let server = setupServer(
rest.post(MOCKED_URL, (req, res, ctx) =>
return res(
ctx.status(200),
ctx.json(req.body),
)
),
)
beforeAll(() => server.listen())
afterEach(() => server.resetHandlers())
afterAll(() => server.close())
test('send POST request with body via superagent', async () =>
let response = await window.fetch(MOCKED_URL,
method: 'POST',
mode: 'cors',
cache: 'no-cache',
headers: 'Content-Type': 'application/json' ,
body: bar: 6, baz: '34'
);
console.log(response);
expect(response.body).toMatchObject(
bar: 6,
baz: '34',
)
);
console.log(response)
的输出是
type: 'default',
status: 200,
ok: true,
statusText: 'OK',
headers: Headers
map: 'x-powered-by': 'msw', 'content-type': 'application/json'
,
url: '',
bodyUsed: false,
_bodyInit: Blob ,
_bodyBlob: Blob
谁能解释为什么没有归还尸体以及如何让这个测试起作用?
【问题讨论】:
【参考方案1】:您需要调用await response.json()
来获取响应正文。
const body = await response.json();
expect(body).toMatchObject(bar: 6, baz: '34);
【讨论】:
以上是关于@testing-library/与 msw/node 反应; window.fetch 未在 POST 上返回正文的主要内容,如果未能解决你的问题,请参考以下文章
如何在全球范围内添加“@testing-library/jest-dom”?
使用 Jest 运行 testing-library/react-native 时 RNEncryptedStorage 未定义
如何断言哪个值已传递给 <li> 键属性以与 jest 和 testing-library/react 反应
使用 Jest 和 @testing-library/react-native 测试 React Native 项目时出现“SyntaxError: Cannot use import stateme