reactjs - Jest referensfel 'describe' är inte definierat när Next.js-build körs


Jag har problem med att få ett next build att slutföras utan att följande fel uppstår:

> Build error occurred
{ ReferenceError: describe is not defined

Dev-servern och testerna körs utan problem men det verkar inte som att den plockar upp Jest-globalen describe i mina *.spec.tsx-filer.

Jag använder node-version 10.16.1 med följande package.json:

{
    "name": "trufflus",
    "version": "0.1.0",
    "private": true,
    "scripts": {
        "dev": "next dev",
        "build": "next build",
        "start": "next start",
        "deploy": "npm run build && next export",
        "test": "jest",
        "test:watch": "yarn test -- --watch",
        "lint": "eslint '*/**/*.{js,ts,tsx}' --quiet --fix"
    },
    "husky": {
        "hooks": {
            "pre-commit": "lint-staged"
        }
    },
    "lint-staged": {
        "*.{js,ts,tsx}": [
            "eslint --fix"
        ]
    },
    "dependencies": {
        "next": "9.4.2",
        "react": "16.13.1",
        "react-dom": "16.13.1",
        "tailwindcss": "^1.4.6",
        "typeface-lobster": "^0.0.72",
        "typeface-roboto": "^0.0.75"
    },
    "devDependencies": {
        "autoprefixer": "^9.8.0",
        "postcss-import": "^12.0.1",
        "postcss-preset-env": "^6.7.0",
        "@testing-library/jest-dom": "^5.8.0",
        "@testing-library/react": "^10.0.4",
        "@types/jest": "^25.2.3",
        "@types/node": "^14.0.5",
        "@types/react": "^16.9.35",
        "@typescript-eslint/eslint-plugin": "^3.0.0",
        "@typescript-eslint/parser": "^3.0.0",
        "eslint": "^7.1.0",
        "eslint-config-prettier": "^6.11.0",
        "eslint-plugin-jest": "^23.13.1",
        "eslint-plugin-prettier": "^3.1.3",
        "eslint-plugin-react": "^7.20.0",
        "husky": "^4.2.5",
        "jest": "25.5.4",
        "lint-staged": "^10.2.6",
        "prettier": "^2.0.5",
        "prop-types": "^15.7.2",
        "ts-jest": "25.5.1",
        "typescript": "^3.9.3"
    }
}

Jag har två separata TypeScript-konfigurationsfiler; en för utvecklings-/produktionsbyggen:

{
    "compilerOptions": {
        "target": "es5",
        "lib": ["dom", "dom.iterable", "esnext"],
        "allowJs": true,
        "skipLibCheck": true,
        "strict": false,
        "forceConsistentCasingInFileNames": true,
        "noEmit": true,
        "esModuleInterop": true,
        "module": "esnext",
        "moduleResolution": "node",
        "resolveJsonModule": true,
        "isolatedModules": true,
        "jsx": "preserve"
    },
    "exclude": ["node_modules"],
    "include": ["next-env.d.ts", "node_modules/@types", "**/*.ts", "**/*.tsx"]

Och en för testning:

{
    "extends": "./tsconfig.json",
    "compilerOptions": {
        "jsx": "react",
        "types": ["jest", "node"]
    },
    "exclude": ["**/*.spec.tsx"]
}

Jag har separata components och pages mappar som båda innehåller *.spec.tsx filer.

Jag har försökt uppgradera min version av Node och enligt detta problem:

ReferenceError: describe är inte definierad i Jest + Typescript

Min konfiguration ovan borde fungera men jag vet inte var det nu misslyckas.

Jag har försökt uppgradera jest, ts-jest och node utan framgång!

Svar #1

Utvecklingsservern och testerna körs utan problem men det verkar inte som om den plockar upp jest global describe i mina *.spec.tsx-filer

Detta beror förmodligen på att din tsconfig för test har den här raden "exclude": ["**/*.spec.tsx"] medan dina dev/prod tsconfig inte har det.

Du behöver utesluta din testfil från att kompileras under byggprocessen.

Svar #2

Jag löste det genom att flytta tests-mappen från src/pages till src/ och det fungerade perfekt.