node.js - Node.js 模拟 context.req.headers.referer
问题描述
我在项目中实现了一个重定向回之前访问过的页面,现在必须调整一些失败的测试,因为:
Cannot read property 'headers' of undefined
TypeError: Cannot read property 'headers' of undefine
我搜索了一段时间,但找不到一个好的解决方案或将给定的答案转移到我当前的问题。
功能
export const getServerSideProps: GetServerSideProps<Props> = async (ctx) => {
...
const referer = ctx.req.headers.referer
let backlink = referer
if (!referer) {
...
backlink = ...
}
return {
props: {
...initialProps.props,
product,
backlink,
...
}
}
测试
it('getServerSideProps should return product', async () => {
mocked(getProductByKey).mockResolvedValueOnce(mockedProducts[0])
const ctx = {
query: { productKey: mockedProducts[0].key } as ParsedUrlQuery,
}
const result = await getServerSideProps(ctx as GetServerSidePropsContext)
expect((result as any).props.product).toEqual(mockedProducts[0])
})
有没有办法模拟 context.req.headers.referer?我还需要它来进行我自己的尚未编写的重定向测试。
解决方案
好吧,看来您必须向您的变量添加属性ctx
。
错误是:Cannot read property 'headers' of undefined
。
我可以看到const referer = ctx.req.headers.referer
未定义ctx.req
的位置。
两种可能性:
首先:这是一个逻辑错误,
req
或者req.headers
有时可能未定义,您应该替换您的 javascriptconst referer = ctx.req.headers.referer
以const referer = ctx && ctx.req && ctx.req.headers && ctx.req.headers.referer
添加检查。第二:这是一个测试错误,
req
并且req.headers
总是被定义并且你的模拟丢失了它。只需在您的规范文件中替换:
const ctx = {
query: { productKey: mockedProducts[0].key } as ParsedUrlQuery,
req: { headers: {
referer: 'backlink', // or undefined
} }
}
您的错误应该得到修复,'backlink'
如果需要,您可以编辑其他测试的引用值(暂时)。
推荐阅读
- apache-pulsar - 用于日志记录的“旁观者”Pulsar Consumer
- python-3.x - SQLAlchemy 没有属性 Column
- xaml - 在 SkiaSharp (UWP) 中正确对齐 UI 元素
- html - HTML中“标签类型”的含义
- mysql - 如何在一个表中获取父子数据,如 MySQL 中的数据透视表?
- aem - 将静态模板中的 parsys 限制为仅包含某些组件而不使用 etc/design (AEM)
- wiremock - 如何通过 json 文件进行具有动态存根的并行线模拟测试执行
- elasticsearch - Kibana:CONTROL 可视化不显示所有值
- ios - UITableView 在 API 调用完成之前加载单元格
- html - 如何使导航栏居中,但在固定位置的右上角有更多导航