From 62e9dff6170a0c973113070742cb9a1a8034a217 Mon Sep 17 00:00:00 2001 From: Emily Xiong Date: Fri, 10 May 2024 16:13:31 -0400 Subject: [PATCH] fix(react-native): fix test-setup for react native/expo jest --- .../application/files/test-setup.ts.template | 1 - .../files/tsconfig.app.json.template | 2 +- .../library/files/lib/test-setup.ts.template | 1 - .../files/lib/tsconfig.lib.json.template | 2 +- .../src/generators/library/library.spec.ts | 60 ++++++++++++++++++- packages/expo/src/utils/add-jest.ts | 9 ++- .../files/src/test-setup.ts__tmpl__ | 1 + .../src/generators/configuration/schema.d.ts | 2 +- .../application/application.spec.ts | 2 +- .../files/app/test-setup.ts.template | 1 - .../files/app/tsconfig.app.json.template | 2 +- .../library/files/lib/test-setup.ts.template | 1 - .../files/lib/tsconfig.lib.json.template | 2 +- .../src/generators/library/library.spec.ts | 5 +- packages/react-native/src/utils/add-jest.ts | 4 +- 15 files changed, 77 insertions(+), 18 deletions(-) delete mode 100644 packages/expo/src/generators/application/files/test-setup.ts.template delete mode 100644 packages/expo/src/generators/library/files/lib/test-setup.ts.template delete mode 100644 packages/react-native/src/generators/application/files/app/test-setup.ts.template delete mode 100644 packages/react-native/src/generators/library/files/lib/test-setup.ts.template diff --git a/packages/expo/src/generators/application/files/test-setup.ts.template b/packages/expo/src/generators/application/files/test-setup.ts.template deleted file mode 100644 index 9f28ad211b736..0000000000000 --- a/packages/expo/src/generators/application/files/test-setup.ts.template +++ /dev/null @@ -1 +0,0 @@ -import '@testing-library/jest-native/extend-expect'; diff --git a/packages/expo/src/generators/application/files/tsconfig.app.json.template b/packages/expo/src/generators/application/files/tsconfig.app.json.template index e6defb5dc1f9f..80217c0f62c44 100644 --- a/packages/expo/src/generators/application/files/tsconfig.app.json.template +++ b/packages/expo/src/generators/application/files/tsconfig.app.json.template @@ -5,6 +5,6 @@ "types": ["node"] }, "files": ["<%= offsetFromRoot %>node_modules/@nx/expo/typings/svg.d.ts"], - "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.spec.tsx", "test-setup.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.spec.tsx", "src/test-setup.ts"], "include": ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] } diff --git a/packages/expo/src/generators/library/files/lib/test-setup.ts.template b/packages/expo/src/generators/library/files/lib/test-setup.ts.template deleted file mode 100644 index 9f28ad211b736..0000000000000 --- a/packages/expo/src/generators/library/files/lib/test-setup.ts.template +++ /dev/null @@ -1 +0,0 @@ -import '@testing-library/jest-native/extend-expect'; diff --git a/packages/expo/src/generators/library/files/lib/tsconfig.lib.json.template b/packages/expo/src/generators/library/files/lib/tsconfig.lib.json.template index 800eaa9333cfd..c0b1d9caa1817 100644 --- a/packages/expo/src/generators/library/files/lib/tsconfig.lib.json.template +++ b/packages/expo/src/generators/library/files/lib/tsconfig.lib.json.template @@ -4,6 +4,6 @@ "outDir": "<%= offsetFromRoot %>dist/out-tsc", "types": ["node"] }, - "exclude": ["**/*.spec.ts", "**/*.spec.tsx", "test-setup.ts"], + "exclude": ["**/*.spec.ts", "**/*.spec.tsx", "src/test-setup.ts"], "include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"] } diff --git a/packages/expo/src/generators/library/library.spec.ts b/packages/expo/src/generators/library/library.spec.ts index 403e302856b66..b986ef1965dad 100644 --- a/packages/expo/src/generators/library/library.spec.ts +++ b/packages/expo/src/generators/library/library.spec.ts @@ -198,7 +198,7 @@ describe('lib', () => { }); }); - describe('--unit-test-runner none', () => { + describe('--unit-test-runner', () => { it('should not generate test configuration', async () => { await expoLibraryGenerator(appTree, { ...defaultSchema, @@ -220,6 +220,64 @@ describe('lib', () => { } `); }); + + it('should generate test configuration', async () => { + await expoLibraryGenerator(appTree, { + ...defaultSchema, + unitTestRunner: 'jest', + }); + + expect(appTree.read('my-lib/tsconfig.spec.json', 'utf-8')) + .toMatchInlineSnapshot(` + "{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "files": ["src/test-setup.ts"], + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.test.tsx", + "src/**/*.spec.tsx", + "src/**/*.test.js", + "src/**/*.spec.js", + "src/**/*.test.jsx", + "src/**/*.spec.jsx", + "src/**/*.d.ts" + ] + } + " + `); + expect(appTree.read('my-lib/jest.config.ts', 'utf-8')) + .toMatchInlineSnapshot(` + "module.exports = { + displayName: 'my-lib', + resolver: '@nx/jest/plugins/resolver', + preset: 'jest-expo', + moduleFileExtensions: ['ts', 'js', 'html', 'tsx', 'jsx'], + setupFilesAfterEnv: ['/src/test-setup.ts'], + moduleNameMapper: { + '\\\\.svg$': '@nx/expo/plugins/jest/svg-mock', + }, + transform: { + '.[jt]sx?$': [ + 'babel-jest', + { + configFile: __dirname + '/.babelrc.js', + }, + ], + '^.+.(bmp|gif|jpg|jpeg|mp4|png|psd|svg|webp|ttf|otf|m4v|mov|mp4|mpeg|mpg|webm|aac|aiff|caf|m4a|mp3|wav|html|pdf|obj)$': + require.resolve('jest-expo/src/preset/assetFileTransformer.js'), + }, + coverageDirectory: '../coverage/my-lib', + }; + " + `); + }); }); describe('--buildable', () => { diff --git a/packages/expo/src/utils/add-jest.ts b/packages/expo/src/utils/add-jest.ts index e02b46f4c7ea2..72aed0b5c4013 100644 --- a/packages/expo/src/utils/add-jest.ts +++ b/packages/expo/src/utils/add-jest.ts @@ -1,4 +1,4 @@ -import { Tree } from '@nx/devkit'; +import { Tree, offsetFromRoot } from '@nx/devkit'; import { configurationGenerator } from '@nx/jest'; export async function addJest( @@ -19,7 +19,7 @@ export async function addJest( project: projectName, supportTsx: true, skipSerializers: true, - setupFile: 'none', + setupFile: 'react-native', compiler: 'babel', skipPackageJson, skipFormat: true, @@ -34,7 +34,7 @@ export async function addJest( resolver: '@nx/jest/plugins/resolver', preset: 'jest-expo', moduleFileExtensions: ['ts', 'js', 'html', 'tsx', 'jsx'], - setupFilesAfterEnv: ['/test-setup.${js ? 'js' : 'ts'}'], + setupFilesAfterEnv: ['/src/test-setup.${js ? 'js' : 'ts'}'], moduleNameMapper: { '\\\\.svg$': '@nx/expo/plugins/jest/svg-mock' }, @@ -49,6 +49,9 @@ export async function addJest( 'jest-expo/src/preset/assetFileTransformer.js' ), }, + coverageDirectory: '${offsetFromRoot( + appProjectRoot + )}coverage/${appProjectRoot}' };`; host.write(configPath, content); diff --git a/packages/jest/src/generators/configuration/files/src/test-setup.ts__tmpl__ b/packages/jest/src/generators/configuration/files/src/test-setup.ts__tmpl__ index e69de29bb2d1d..46cf3ff161e58 100644 --- a/packages/jest/src/generators/configuration/files/src/test-setup.ts__tmpl__ +++ b/packages/jest/src/generators/configuration/files/src/test-setup.ts__tmpl__ @@ -0,0 +1 @@ +<% if(setupFile === 'react-native') { %>import '@testing-library/jest-native/extend-expect';<% } %> \ No newline at end of file diff --git a/packages/jest/src/generators/configuration/schema.d.ts b/packages/jest/src/generators/configuration/schema.d.ts index afc7659eae769..b668a34948c47 100644 --- a/packages/jest/src/generators/configuration/schema.d.ts +++ b/packages/jest/src/generators/configuration/schema.d.ts @@ -6,7 +6,7 @@ export interface JestProjectSchema { * @deprecated use setupFile instead */ skipSetupFile?: boolean; - setupFile?: 'angular' | 'web-components' | 'none'; + setupFile?: 'angular' | 'web-components' | 'react-native' | 'none'; skipSerializers?: boolean; testEnvironment?: 'node' | 'jsdom' | 'none'; /** diff --git a/packages/react-native/src/generators/application/application.spec.ts b/packages/react-native/src/generators/application/application.spec.ts index ca2343713d156..6e68f3dc82678 100644 --- a/packages/react-native/src/generators/application/application.spec.ts +++ b/packages/react-native/src/generators/application/application.spec.ts @@ -78,7 +78,7 @@ describe('app', () => { preset: 'react-native', resolver: '@nx/jest/plugins/resolver', moduleFileExtensions: ['ts', 'js', 'html', 'tsx', 'jsx'], - setupFilesAfterEnv: ['/test-setup.ts'], + setupFilesAfterEnv: ['/src/test-setup.ts'], moduleNameMapper: { '\\\\.svg$': '@nx/react-native/plugins/jest/svg-mock', }, diff --git a/packages/react-native/src/generators/application/files/app/test-setup.ts.template b/packages/react-native/src/generators/application/files/app/test-setup.ts.template deleted file mode 100644 index 9f28ad211b736..0000000000000 --- a/packages/react-native/src/generators/application/files/app/test-setup.ts.template +++ /dev/null @@ -1 +0,0 @@ -import '@testing-library/jest-native/extend-expect'; diff --git a/packages/react-native/src/generators/application/files/app/tsconfig.app.json.template b/packages/react-native/src/generators/application/files/app/tsconfig.app.json.template index 00946872bf8e9..7b33f4033a0e3 100644 --- a/packages/react-native/src/generators/application/files/app/tsconfig.app.json.template +++ b/packages/react-native/src/generators/application/files/app/tsconfig.app.json.template @@ -5,6 +5,6 @@ "types": ["node"] }, "files": ["<%= offsetFromRoot %>node_modules/@nx/react-native/typings/svg.d.ts"], - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.spec.tsx", "test-setup.ts"], + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.spec.tsx", "src/test-setup.ts"], "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.js", "src/**/*.jsx"] } diff --git a/packages/react-native/src/generators/library/files/lib/test-setup.ts.template b/packages/react-native/src/generators/library/files/lib/test-setup.ts.template deleted file mode 100644 index 9f28ad211b736..0000000000000 --- a/packages/react-native/src/generators/library/files/lib/test-setup.ts.template +++ /dev/null @@ -1 +0,0 @@ -import '@testing-library/jest-native/extend-expect'; diff --git a/packages/react-native/src/generators/library/files/lib/tsconfig.lib.json.template b/packages/react-native/src/generators/library/files/lib/tsconfig.lib.json.template index 6f46666df8df9..3532cd09c1b96 100644 --- a/packages/react-native/src/generators/library/files/lib/tsconfig.lib.json.template +++ b/packages/react-native/src/generators/library/files/lib/tsconfig.lib.json.template @@ -4,6 +4,6 @@ "outDir": "<%= offsetFromRoot %>dist/out-tsc", "types": ["node"] }, - "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.spec.tsx", "test-setup.ts"], + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.spec.tsx", "src/test-setup.ts"], "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"] } diff --git a/packages/react-native/src/generators/library/library.spec.ts b/packages/react-native/src/generators/library/library.spec.ts index 0c0d799ac26c3..d8aa486ceca00 100644 --- a/packages/react-native/src/generators/library/library.spec.ts +++ b/packages/react-native/src/generators/library/library.spec.ts @@ -199,7 +199,7 @@ describe('lib', () => { }); }); - describe('--unit-test-runner none', () => { + describe('--unit-test-runner', () => { it('should not generate test configuration', async () => { await libraryGenerator(appTree, { ...defaultSchema, @@ -225,6 +225,7 @@ describe('lib', () => { "module": "commonjs", "types": ["jest", "node"] }, + "files": ["src/test-setup.ts"], "include": [ "jest.config.ts", "src/**/*.test.ts", @@ -247,7 +248,7 @@ describe('lib', () => { preset: 'react-native', resolver: '@nx/jest/plugins/resolver', moduleFileExtensions: ['ts', 'js', 'html', 'tsx', 'jsx'], - setupFilesAfterEnv: ['/test-setup.ts'], + setupFilesAfterEnv: ['/src/test-setup.ts'], moduleNameMapper: { '\\\\.svg$': '@nx/react-native/plugins/jest/svg-mock', }, diff --git a/packages/react-native/src/utils/add-jest.ts b/packages/react-native/src/utils/add-jest.ts index 0e733b13e0915..23a5437662257 100644 --- a/packages/react-native/src/utils/add-jest.ts +++ b/packages/react-native/src/utils/add-jest.ts @@ -19,7 +19,7 @@ export async function addJest( project: projectName, supportTsx: true, skipSerializers: true, - setupFile: 'none', + setupFile: 'react-native', compiler: 'babel', skipPackageJson, skipFormat: true, @@ -33,7 +33,7 @@ export async function addJest( preset: 'react-native', resolver: '@nx/jest/plugins/resolver', moduleFileExtensions: ['ts', 'js', 'html', 'tsx', 'jsx'], - setupFilesAfterEnv: ['/test-setup.${js ? 'js' : 'ts'}'], + setupFilesAfterEnv: ['/src/test-setup.${js ? 'js' : 'ts'}'], moduleNameMapper: { '\\\\.svg$': '@nx/react-native/plugins/jest/svg-mock' },