Node.js 模拟 context.req.headers.referer
Node.js mock 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
有时可能未定义,您应该将javascript const 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
} }
}
您的错误应该已修复,如果需要,您可以为其他测试编辑 referer 值(暂时 'backlink'
)。
我在一个项目中实施了一个重定向回到之前访问过的页面,现在必须调整一些失败的测试,因为:
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
} }
}
您的错误应该已修复,如果需要,您可以为其他测试编辑 referer 值(暂时 'backlink'
)。