【问题标题】:Node.js mock context.req.headers.refererNode.js 模拟 context.req.headers.referer
【发布时间】:2021-11-18 21:44:43
【问题描述】:

我在一个项目中实现了一个重定向回之前访问过的页面,现在必须调整一些失败的测试,因为:

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?我还需要这个来进行我自己的尚未编写的重定向测试。

【问题讨论】:

    标签: node.js reactjs testing jestjs


    【解决方案1】:

    好吧,看来您必须向变量 ctx 添加属性。

    错误是:Cannot read property 'headers' of undefined

    我可以看到const referer = ctx.req.headers.referer,其中ctx.req 未定义。

    两种可能:

    • 首先:这是一个逻辑错误,reqreq.headers 有时可能未定义,您应该将您的 javascript const referer = ctx.req.headers.referer 替换为 const referer = ctx &amp;&amp; ctx.req &amp;&amp; ctx.req.headers &amp;&amp; ctx.req.headers.referer 以添加检查。

    • 第二:这是一个测试错误,reqreq.headers 将始终被定义,而你的模拟丢失了它。只需在您的规范文件中替换:

        const ctx = {
          query: { productKey: mockedProducts[0].key } as ParsedUrlQuery,
          req: { headers: {
            referer: 'backlink', // or undefined
          } }
        }
    

    您的错误应该已修复,如果需要,您可以编辑引用值(目前为 'backlink')以进行其他测试。

    【讨论】:

    • 谢谢。我执行了你的两个建议。
    猜你喜欢
    • 2013-07-03
    • 1970-01-01
    • 2014-06-14
    • 2016-05-10
    • 1970-01-01
    • 2012-09-13
    • 2019-06-01
    • 2015-02-21
    • 2014-04-06
    相关资源
    最近更新 更多