Younes Jaaidi 9fe8274367
feat(angular): add vitest option to angular (#27311)
- This adds `vitest` option to `unitTestRunner` for Angular generators.
- This **does not** add vitest option to `create-nx-workspace` but I
think we should provide this as an option in the future. Please let me
know if you wantme to add this here or as a future feature.

---------

Co-authored-by: Colum Ferry <cferry09@gmail.com>
2024-10-29 14:31:48 -04:00

85 lines
1.9 KiB
TypeScript

import {
addDependenciesToPackageJson,
ensurePackage,
joinPathFragments,
type Tree,
} from '@nx/devkit';
import { analogVitestAngular, nxVersion } from '../../utils/versions';
export type AddVitestOptions = {
name: string;
projectRoot: string;
skipPackageJson: boolean;
strict: boolean;
};
export async function addVitest(
tree: Tree,
options: AddVitestOptions
): Promise<void> {
if (!options.skipPackageJson) {
addDependenciesToPackageJson(
tree,
{},
{
'@analogjs/vitest-angular': analogVitestAngular,
'@analogjs/vite-plugin-angular': analogVitestAngular,
},
undefined,
true
);
}
const { createOrEditViteConfig, viteConfigurationGenerator } = ensurePackage<
typeof import('@nx/vite')
>('@nx/vite', nxVersion);
const relativeTestSetupPath = joinPathFragments('src', 'test-setup.ts');
const setupFile = joinPathFragments(
options.projectRoot,
relativeTestSetupPath
);
if (!tree.exists(setupFile)) {
tree.write(
setupFile,
`import '@analogjs/vitest-angular/setup-zone';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting,
} from '@angular/platform-browser-dynamic/testing';
import { getTestBed } from '@angular/core/testing';
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting()
);
`
);
await viteConfigurationGenerator(tree, {
project: options.name,
newProject: true,
uiFramework: 'none',
includeVitest: true,
testEnvironment: 'jsdom',
});
createOrEditViteConfig(
tree,
{
project: options.name,
includeLib: false,
includeVitest: true,
inSourceTests: false,
imports: [`import angular from '@analogjs/vite-plugin-angular'`],
plugins: ['angular()'],
setupFile: relativeTestSetupPath,
useEsmExtension: true,
},
true
);
}
}