7 votes

Angular CLI - Comment récupérer les fichiers .spec.ts en dehors du dossier src ?

J'ai un projet Angular CLI avec un NgModule situé à l'extérieur de la /src (éventuellement, ce NgModule sera empaqueté comme un module npm, mais pour l'instant, je le laisse en dehors du dossier /src ).

J'essaie d'écrire des tests unitaires pour ce NgModule mais ng test n'a pas l'air de capter .spec.ts en dehors des fichiers /src dossier.

J'ai essayé de modifier le chemin dans /src/test.ts :

// Original
const context = require.context('./', true, /\.spec\.ts$/);

// Does not work
const context = require.context('../', true, /\.spec\.ts$/);

// Does not work
const context = require.context('/absolute/path/to/ngmodule', true, /\.spec\.ts$/);

Mais je reçois une erreur : Module build failed: Error: /absolute/path/to/file.spec.ts is not part of the compilation. Please make sure it is in your tsconfig via the 'files' or 'include' property.

J'ai également essayé d'ajouter le chemin d'accès à mon NgModule dans le champ include propriété de tsconfig.spec.json :

"include": [
  "../my-ng-module/**/*.spec.ts",  // Added this
  "**/*.spec.ts",
  "**/*.d.ts"
]

Mais sans succès. Vous avez des idées ?

12voto

Ampati Hareesh Points 1496

Dans tsconfig.spec.json

 "include": [
    "../*.spec.ts", // your spec file location parent of src or ../yourpath/
    "**/*.spec.ts",
    "**/*.d.ts"
  ] 

Dans test.ts

Si vous choisissez le répertoire parent, il choisit aussi les autres spécifications, donc lorsque vous choisissez le répertoire parent de src, donnez le nom de votre composant ou spécifiez le nom du composant. choisissez le répertoire parent de src puis donnez le nom de votre composant ou spécifiez le chemin exact de votre spécification

 const context1 = require.context('./', true, /\.spec\.ts$/);//
 const context = require.context('../', true, /app\.component\.spec\.ts$/);//
 context.keys().map(context);
 context1.keys().map(context1);

Lorsque vous êtes dans le dossier parent de src, le même contexte récupère les fichiers qui se trouvent dans node_modules, d'où la nécessité de mentionner le nom spec.ts.

Les fichiers spec.ts qui se trouvent dans src seront exécutés comme auparavant. enter image description here

La spécification de l'application est dans le parent de src et la spécification du jeu est dans le dossier src.

Si vous voulez spécifier seulement le répertoire racine et à partir de là vous voulez choisir tous les fichiers spec, alors nous donnons une convention de nom différente qui diffère des fichiers spec dans node_modules. Disons que ceux qui sont hors de src comme yourapp.componentout.spec.ts et qui sont à l'intérieur de insideapp.componentin.spec.ts et vous pouvez donner un seul chemin au lieu de deux répertoires

const context = require.context('../', true, /out\.spec\.ts$|in\.spec\.ts$/);//
context.keys().map(context);

ou de l'autre côté, suivre la convention de nommage pour les fichiers qui sont en dehors de src seulement et mettre

 const context1 = require.context('./', true, /\.spec\.ts$/);//
 const context = require.context('../', true, /out\.spec\.ts$/);//
 context.keys().map(context);
 context1.keys().map(context1);

si vous ne voulez pas changer les noms des fichiers spec, alors donnez le chemin de l'emplacement de votre module au lieu de son parent où vous pouvez sauter la partie node_modules.

En fait, nous pouvons modifier les éléments ci-dessous en fonction de nos besoins.

  require.context(directory, useSubdirectories = false, regExp = /^\.\//)

J'espère que cela vous aidera ! !!

Réf : https://webpack.js.org/guides/dependency-management/#require-context

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X