为什么HapiJS中h.response返回字符串而非文档描述的对象?
问题原因
server.inject()方法返回的响应对象中,payload字段默认是字符串格式,Hapi不会根据响应的content-type自动将JSON字符串转换为JavaScript对象,这是框架的预期设计。
解决方案
你可以通过两种方式修复测试用例:
方案1:手动解析payload
把获取到的字符串格式payload通过JSON.parse()转换为对象后再做断言:
it('payload should be a json object', async () => { const res = await server.inject({ method: 'GET', url: '/users' }) const parsedPayload = JSON.parse(res.payload) expect(parsedPayload).to.be.object() })
方案2:直接使用已解析的result字段
Hapi的inject响应对象内置了result字段,存储的是路由handler返回的原始未序列化对象,无需手动解析:
it('payload should be a json object', async () => { const res = await server.inject({ method: 'GET', url: '/users' }) expect(res.result).to.be.object() })
优化提示
你路由代码中重复设置content-type的操作是冗余的,Hapi在返回对象类型响应时会自动设置content-type为application/json,你可以删除.type('application/json')和.header('content-type', 'application/json')两行代码。
内容的提问来源于stack exchange,提问作者Diesan Romero
相关产品推荐
相关产品推荐

