2017-08-30 5 views
0

Je développe une application avec reac-native et tapuscrit et je fais les tests avec Jest, mais j'ai un problème quand j'utilise des paquets scoped (@assets), jest ne trouve pas le chemin et donne une erreur .Utiliser des packages avec Jest

La structure du répertoire ressemble à ceci:

project/ 
    assets/ 
    img/ 
     foo.png 
    package.json 
    src/ 
    Foo.ts 
    build/ 
    Foo.js 


// assets/package.json 
{ 
    "name": "@assets" // My @assets scope 
} 

// build/Foo.js 
const image = require('@assets/img/foo.png'); // <- error in Jest 

Alors, quand je lance la plaisanterie:

npm run jest build/

Il ne peut pas trouver '@ actifs/img/foo.png' et jette l'erreur :

Cannot find module '@assets/img/logo.png' from 'Foo.js'

Comment utiliser le package scope dans Jest?

Version Jest: 20.0.4

grâce

+0

erm. cela ne vous dérange pas si vous avez 'package.json' dans un sous-dossier si vous ne l'avez pas dans' node_modules' et 'npm install'ed /' link'ed il. vous pouvez toujours le faire fonctionner via des alias webpack, voir https://webpack.js.org/configuration/resolve/ –

+0

@DimitarChristoff, merci mec, j'ai trouvé le moduleNameMapper que je peux mettre dans jest config. – Armando

Répondre

0

nécessaires définissent uniquement le moduleNameMapper dans la configuration de plaisanterie:

// package.json 
"jest": { 
    "moduleNameMapper": { 
     "^@assets.+\\.(png)$": "<rootDir>/assetsTransformer.js" 
    }, 
} 

// assetsTransformers.js 
const path = require('path'); 

module.exports = { 
    process(src, filename, config, options) { 
    return 'module.exports = ' + JSON.stringify(path.basename(filename)) + ';'; 
    }, 
}; 

Merci pour this comment :-)

+0

sûr - J'ai fait cela pour remplacer tous les actifs statiques avec des vrais :) https://github.com/DimitarChristoff/jest-static-stubs –

0

Pour ceux qui obtiennent ici qui utilisent des paquets privés sous une organisation scoped, voici comment j'ai abordé ceci:

"jest": { 
    "moduleNameMapper": { 
    "^@org-name/(.*)$": "<rootDir>/node_modules/@org-name/$1/dist/$1.es5.js" 
    } 
} 

Cela suppose que tous vos packages ont un chemin similaire à leur module exporté. Si ce n'est pas le cas, vous pouvez les spécifier individuellement:

"jest": { 
    "moduleNameMapper": { 
    "^@org-name/package-one$": "<rootDir>/node_modules/org-name/package-one/dist/package.js", 
    "^@org-name/package-two$": "<rootDir>/node_modules/org-name/package-two/build/index.js" 
    } 
}