无法使用TypeScript运行Jest - "找不到模块'typescript'"

5

我正在尝试使用typescript运行jest,但是遇到了以下错误。该项目在webpack和ts-node中可以正常运行。出于某种原因,我无法让它与jest一起工作。

FAIL  src/__tests__/classes/Utils.spec.ts
● Test suite failed to run

Cannot find module 'typescript'

Require stack:
- /Users/myuser/repos/project/node_modules/ts-jest/dist/config/config-set.js
- /Users/myuser/repos/project/node_modules/ts-jest/dist/ts-jest-transformer.js
- /Users/myuser/repos/project/node_modules/ts-jest/dist/index.js
- /Users/myuser/repos/project/node_modules/@jest/transform/build/ScriptTransformer.js
- /Users/myuser/repos/project/node_modules/@jest/transform/build/index.js
- /Users/myuser/repos/project/node_modules/jest-runtime/build/index.js
- /Users/myuser/repos/project/node_modules/@jest/core/build/cli/index.js
- /Users/myuser/repos/project/node_modules/@jest/core/build/jest.js
- /Users/myuser/repos/project/node_modules/jest/node_modules/jest-cli/build/cli/index.js
- /Users/myuser/repos/project/node_modules/jest/node_modules/jest-cli/bin/jest.js
- /Users/myuser/repos/project/node_modules/jest/bin/jest.js
- /usr/local/lib/node_modules/jest/node_modules/import-local/index.js
- /usr/local/lib/node_modules/jest/bin/jest.js

jest.config.js

这是配置文件。在roots属性和moduleNameMapper方面,我尝试了许多变化,但无论我在配置中做出什么更改,错误消息都完全相同。

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  roots: ['<rootDir>/src'],
  transform: {
    '^.+\\.tsx?$': 'ts-jest',
  },
  testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$',
  moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
  moduleDirectories: ['node_modules', 'src'],
  moduleNameMapper: {
    '^src/(.*)$': '<rootDir>/src/$1',
  }
};

tsconfig.json

{
    "compilerOptions": {
        "baseUrl": "./",
        "paths": {
            "src/*": ["src/*"],
            "tests/*": ["__tests__/*"]
        },
        "target": "es6",
        "module": "commonjs",
        "esModuleInterop": true,
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "sourceMap": true,
        "inlineSourceMap": false,
        "outDir": "dist",
        "lib": ["es6", "dom", "esnext", "esnext.asynciterable"],
        "typeRoots": ["node_modules/@types", "src/typings"]
    },
    "awesomeTypescriptLoaderOptions": {
        "useBabel": true,
        "useCache": true,
        "useTranspileModule": true
    },
    "include": ["src/**/*.ts"],
    "exclude": ["./node_modules/*"]
}

Utils.spec.js

import { Utils } from 'src/utils/classes/Utils';

test('Generates a 6 digit number'), () => {
    expect(Utils.randomNumberGenerator(6).toHaveLength(6))
});

Utils.ts

export class Utils {
    public static randomNumberGenerator(length: number): number {
        const baseNumber: number = Number(1 + '0'.repeat(length - 1));
        const randomMultiplier: number = Math.floor(Math.random() * Number('9' + '0'.repeat(length - 1)));
        const randomToken: number = baseNumber + randomMultiplier;
        return randomToken;
    }
}

1
看起来你没有在本地依赖中安装 TypeScript? - tmhao2005
2
你成功安装了那种奇怪的版本吗?它应该是3.9.7。 - tmhao2005
@tmhao2005 是的,但是既然你指出了这个问题,我试着通过运行 npm i typescript@latest 进行升级,它为我安装了typescript 4.0.2。仍然存在同样的问题。 - Jørgen Vik
@tmhao2005 https://pastebin.com/TcU5FUDL 是 tree -L 2 命令的输出结果(不包含 node_modules)。Package.json:https://pastebin.com/pQsN0scq - Jørgen Vik
1
看起来你是全局安装了Jest,这可能会引起问题,建议你在本地安装后再试一次。 - tmhao2005
显示剩余3条评论
1个回答

9

@tmhao 很好地帮助了我解决了这个问题。

问题是 ts-jest 没有安装,错误信息比较不清晰。


谢谢先生 :D 我确实同意错误信息不是最好的。 - Dmitrii Rogozin
哇,谢谢!下面的错误提示让我明白了。node_modules/jest-cli/build/cli/index.js:161 if (error?.stack) {
^ SyntaxError:意外的标记 .
- pythlang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接