@nx/expo
Version:
60 lines (59 loc) • 2.45 kB
JavaScript
"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;
}