node.jstypescriptjestjspuluminx-monorepo

Cannot find module 'spdx-license-ids' when running tests with Jest and Pulumi


I'm encountering an error when trying to run a test with Jest in a project that uses Pulumi.

Here's the error stack:

Cannot find module 'spdx-license-ids' from '../../node_modules/spdx-expression-parse/scan.js'

  at Resolver._throwModNotFoundError (../../node_modules/jest-> > >resolve/build/resolver.js:427:11)  
  at Object.<anonymous> (../../node_modules/spdx-expression-parse/scan.js:4:11)  
  at Object.<anonymous> (../../node_modules/spdx-expression-parse/index.js:3:12)  
  at Object.<anonymous> (../../node_modules/validate-npm-package-license/index.js:1:177)  
  at Object.<anonymous> (../../node_modules/normalize-package-data/lib/fixer.js:3:23)  
  at Object.<anonymous> (../../node_modules/normalize-package-data/lib/normalize.js:3:13)  
  at Object.<anonymous> (../../node_modules/@pulumi/runtime/closure/codePaths.ts:21:1)  
  at Object.<anonymous> (../../node_modules/@pulumi/runtime/index.ts:22:1)  
  at Object.<anonymous> (../../node_modules/@pulumi/index.ts:31:1)  
  at Object.<anonymous> (src/lib/infrastructure.spec.ts:1:1)  

  1 | import * as pulumi from "@pulumi/pulumi";
    | ^

jest.config.ts

export default {
  displayName: 'infrastructure',
  preset: '../../jest.preset.js',
  testEnvironment: 'node',
  transform: {
    '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '<rootDir>/tsconfig.spec.json' }],
  },
  moduleFileExtensions: ['ts', 'js', 'html', 'json'],
  coverageDirectory: '../../coverage/packages/infrastructure',
};

Details:

What I've Tried:

Question: What could be the cause of this error? How can I fix it?


Solution

  • The problem is solved by adding json to the moduleFileExtensions array in jest.config.ts.

    moduleFileExtensions: ['ts', 'js', 'html', 'json']
    

    The problem is caused because spdx-license-ids exports a json file, which jest didn't recognize as a valid module.

    spdx-license-ids is used by spdx-expression-parse.