Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problems with package import in version 0.9.1, How can I make Jest work successfully? #242

Open
hooty868 opened this issue May 28, 2024 · 4 comments

Comments

@hooty868
Copy link

backdround

When running individual Jest tests, I encounter an error due to the package not being resolved correctly.

the test will show this error:
`

Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.

Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.

By default "node_modules" folder is ignored by transformers.

Here's what you can do:
 • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.
 • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript
 • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
 • If you need a custom transformation specify a "transform" option in your config.
 • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.

You'll find more details and examples of these config options in the docs:
https://jestjs.io/docs/configuration
For information about custom transformations, see:
https://jestjs.io/docs/code-transformation

Details:

/.pnpm/@[email protected][email protected][email protected]/node_modules/@t3-oss/env-nextjs/dist/index.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import { createEnv as createEnv$1 } from '@t3-oss/env-core';
                                                                                  ^^^^^^

SyntaxError: Cannot use import statement outside a module`

### My environment config:

`

import { createEnv } from '@t3-oss/env-nextjs';
import { z } from 'zod';

export const env = createEnv({
skipValidation: process.env.SKIP_ENV_VALIDATION === 'true',
isServer: typeof window === 'undefined',

server: {
    // Sentry
    SENTRY_RELEASE: z.string().optional(),
    ENABLE_SENTRY_LOG: z.string().optional(),
},

client: {
    // Sentry
    NEXT_PUBLIC_SENTRY_RELEASE: z.string().optional(),
    NEXT_PUBLIC_ENABLE_SENTRY_LOG: z.string().optional(),
},

runtimeEnv: {
    // Sentry
    SENTRY_RELEASE: process.env.SENTRY_RELEASE,
    NEXT_PUBLIC_SENTRY_RELEASE: process.env.NEXT_PUBLIC_SENTRY_RELEASE,
    NEXT_PUBLIC_ENABLE_SENTRY_LOG: process.env.NEXT_PUBLIC_ENABLE_SENTRY_LOG,
    ENABLE_SENTRY_LOG: process.env.ENABLE_SENTRY_LOG,
}

});`

Relevant Package Versions:

  • t3-env pkg v0.9.1
  • Next.js pkg v14.2.3
  • TypeScript pkg v5.3.3

Project tsconfig settings:

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

@lichb0rn
Copy link

lichb0rn commented Jun 2, 2024

Same issue.
Next.js: v14.2.3,
@t3-oss/env-nextjs: 0.10.1,
jest: 29.7.0,
typescript: 5.4.5

My jest.config.js is pretty default:

const nextJest = require('next/jest');

const createJestConfig = nextJest({
  dir: './',
});

const config = {
  coverageProvider: 'v8',
  testEnvironment: 'jsdom',
};

module.exports = createJestConfig(config);

@hooty868
Copy link
Author

hooty868 commented Jun 2, 2024

Here is my current solution.

Add the packages that need to be transpiled in next.config.js:

{
...
transpilePackages: [
      ...
        '@t3-oss/env-nextjs',
        '@t3-oss/env-core',
    ],
}

Due to Jest being unable to parse untranspiled ESM packages, it is necessary to have webpack transpile them first. In Next.js, this can be accomplished by adding transpilePackages to next.config.js.

@luskin
Copy link

luskin commented Jul 16, 2024

This is still and issue as many of us use @t3-oss/* outside of the context of a next config - (i.e. a turborepo package)

@ThomasGHenry
Copy link

None of the above worked for me with https://github.com/Blazity/next-enterprise

After chasing my tail for longer than I'd like to admit, dancing with babel and every other corner of the ecosystem, good old-fashioned mocking got me through.

jest.mock("../env.mjs", () => ({
  env: {
    STRIPE_SECRET_KEY: "test_stripe_secret_key",
    STRIPE_PRODUCT_PRICE_ID: "test_price_id",
  },
}))

I hope that helps someone!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants