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

Testing with Jest fails on angular 13 (14.2.0) #913

Closed
cswan-log opened this issue Nov 15, 2021 · 3 comments
Closed

Testing with Jest fails on angular 13 (14.2.0) #913

cswan-log opened this issue Nov 15, 2021 · 3 comments

Comments

@cswan-log
Copy link

cswan-log commented Nov 15, 2021

Using the just release version 14.2.0

I've set up my angular project to run with jest via the @angular-builders/jest builder. This has worked properly with ngx-toastr and angular version 12.
After the update to angular 13 I got similar issues like #907. Updating ngx-toastr to 14.2.0 sadly did not fix the issue or to be more precise, a new error popped up:

Test suite failed to run

    Jest encountered an unexpected token

    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:

   <..>/node_modules/ngx-toastr/fesm2015/ngx-toastr.mjs:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import * as i0 from '@angular/core';
                                                                                      ^^^^^^

    SyntaxError: Cannot use import statement outside a module

       4 | import { Article } from 'app/core/article/article.model';
    > 5 | import { ToastrService } from 'ngx-toastr';
        | ^
      6 | import { TranslocoService } from '@ngneat/transloco';
      7 | import { finalize } from 'rxjs/operators';
      8 |

      at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1728:14)
      at Object.<anonymous> (src/app/modules/feature/article-info/article-info.component.ts:5:1)

I've tried to modify the jest config - based on this guide from jset:

const esModules = ['ngx-toastr'].join('|');

module.exports = {
    "modulePaths": [
        "<rootDir>",
        "<rootDir>/src",
    ],
    "setupFilesAfterEnv": ['<rootDir>/jest-setup.ts'],
    "moduleNameMapper": {
        "^lodash-es$": "lodash"
    },
    // with and without custom transformers
    "transform": {
        [`(${esModules}).+\\.(js|mjs)$`]: 'babel-jest',
        '^.+\\.(ts|js|html)$': 'jest-preset-angular',
    },
    "transformIgnorePatterns": [`/node_modules/(?!${esModules})`],
}

Running the angular app regularly, does work without any problems. It is only jest which is not happy with the format (because it compiles differently / JIT if I am correct).

@cswan-log
Copy link
Author

cswan-log commented Nov 15, 2021

Followup:

I could fix this by using a broader pattern:

transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'],

The custom transformers are not needed anymore.

See: thymikee/jest-preset-angular#1149 (comment)

You may close the issue if this fix is enough. Maybe a note in the README would help users in the future.

Looks like this will be added to the preset in the future: thymikee/jest-preset-angular#1155

@scttcper
Copy link
Owner

I assume this will have to be fixed as all libraries will be shipped in this format

@cswan-log
Copy link
Author

Since angular 13 I assume. The corresponding docs of the jest preset explain the changes a bit more in depth: https://thymikee.github.io/jest-preset-angular/docs/next/guides/angular-13+/

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

2 participants