UNPKG

@nx/expo

Version:

The Expo Plugin for Nx contains executors and generators for managing and developing an expo application within your workspace. For example, you can directly build for different target platforms as well as generate projects and publish your code.

60 lines (59 loc) 2.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addJest = addJest; const devkit_1 = require("@nx/devkit"); const path_1 = require("path"); const update_tsconfig_files_1 = require("../update-tsconfig-files"); const versions_1 = require("../versions"); async function addJest(host, unitTestRunner, projectName, appProjectRoot, js, skipPackageJson, addPlugin) { if (unitTestRunner !== 'jest') { return () => { }; } const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/jest', versions_1.nxVersion); const jestTask = await configurationGenerator(host, { js, project: projectName, supportTsx: true, skipSerializers: true, setupFile: 'react-native', compiler: 'babel', skipPackageJson, skipFormat: true, addPlugin, }); // Overwrite the jest.config.ts file because react native needs to have special transform property // use preset from https://github.com/expo/expo/blob/main/packages/jest-expo/jest-preset.js const configPath = `${appProjectRoot}/jest.config.${js ? 'js' : 'ts'}`; const content = `module.exports = { displayName: '${projectName}', resolver: require.resolve('./jest.resolver.js'), preset: 'jest-expo', moduleFileExtensions: ['ts', 'js', 'html', 'tsx', 'jsx'], setupFilesAfterEnv: ['<rootDir>/src/test-setup.${js ? 'js' : '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: '${(0, devkit_1.offsetFromRoot)(appProjectRoot)}coverage/${appProjectRoot}' };`; host.write(configPath, content); // Generate only the Jest resolver file from template (0, devkit_1.generateFiles)(host, (0, path_1.join)(__dirname, 'files'), appProjectRoot, { projectName, coverageDirectory: `${(0, devkit_1.offsetFromRoot)(appProjectRoot)}coverage/${appProjectRoot}`, js, }); // Update tsconfig files to handle jest.resolver.js properly (0, update_tsconfig_files_1.updateTsConfigFiles)(host, projectName, appProjectRoot); return jestTask; }