首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何手动初始化next.js应用程序(用于测试目的)?

如何手动初始化next.js应用程序(用于测试目的)?
EN

Stack Overflow用户
提问于 2020-02-27 14:18:29
回答 3查看 3.1K关注 0票数 2

我试图测试托管在我的Next.js应用程序中的web服务,但是我有一个错误,没有找到Next.js配置。

我的web服务是普通的,存储在pages/api目录中。由于以下文件,我的API测试获取了一个常量ATTACKS_ENDPOINT

/pages/api/tests/api.spec.js

代码语言:javascript
复制
import { ATTACKS_ENDPOINT } from "../config"

...

describe("endpoints", () => {
   beforeAll(buildOptionsFetch)

   it("should return all attacks for attacks endpoint", async () => {
      const response = await fetch(API_URL + ATTACKS_ENDPOINT, headers)

config.js

代码语言:javascript
复制
import getConfig from "next/config"

const { publicRuntimeConfig } = getConfig()

export const API_URL = publicRuntimeConfig.API_URL

我的next.config.js是存在的,并且在启动时被应用程序正确地使用。

当测试运行时,将引发此错误。

代码语言:javascript
复制
    TypeError: Cannot destructure property `publicRuntimeConfig` of 'undefined' or 'null'.

  1 | import getConfig from "next/config"
  2 | 
> 3 | const { publicRuntimeConfig } = getConfig()

我寻找解决方案,我找到了这个问题,它谈到了_manually initialise__下一个应用程序。

考虑到我不是测试React组件,而是API web服务,那么如何做到这一点呢?

EN

回答 3

Stack Overflow用户

发布于 2021-09-18 05:56:24

我通过创建一个jest.setup.js文件并添加这一行代码来解决这个问题。

首先将jest.setup.js添加到jest.config.js文件

代码语言:javascript
复制
// jest.config.js

module.exports = {
  // Your config
  setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
};

然后

代码语言:javascript
复制
// jest.setup.js

jest.mock('next/config', () => () => ({
  publicRuntimeConfig: {
    YOUR_PUBLIC_VARIABLE: 'value-of-env'  // Change this line and copy your env
  }
}))

代码语言:javascript
复制
// jest.setup.js
import { setConfig } from 'next/config'
import config from './next.config'

// Make sure you can use "publicRuntimeConfig" within tests.
setConfig(config)
票数 4
EN

Stack Overflow用户

发布于 2020-02-28 09:41:22

我在Jest测试中遇到的问题是next没有像预期的那样被初始化。我的解决方案是模仿下一个模块..。你可以试试这个:

代码语言:javascript
复制
/** @jest-environment node */
jest.mock('next');

import next from 'next';

next.mockReturnValue({
    prepare: () => Promise.resolve(),
    getRequestHandler: () => (req, res) => res.status(200),
    getConfig: () => ({
        publicRuntimeConfig: {} /* This is where you import the mock values */
    })
});

在这里阅读有关手动模拟的内容:https://jestjs.io/docs/en/manual-mocks

票数 1
EN

Stack Overflow用户

发布于 2022-05-23 12:35:12

就我而言,我不得不:

  1. 创建一个jest.setup.js文件
代码语言:javascript
复制
setConfig({
    ...config,
    publicRuntimeConfig: {
        BASE_PATH: '/',
        SOME_KEY: 'your_value',
    },
    serverRuntimeConfig: {
        YOUR_KEY: 'your_value',
    },
});
  1. 然后将其添加到您的jest.config.js文件中:
代码语言:javascript
复制
setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60435277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档