æ©èœããªã¯ãšã¹ãããã°ãå ±åããŸããïŒ
ãã°ãå ±å
çŸåšã®åäœã¯äœã§ããïŒ
ç§ã¯çŸåšãããã€ãã®ãããžã§ã¯ãã§åããã¹ãèšå®ã䜿çšããŠããŸãããã¹ãŠãã€ã©ãŒãã¬ãŒãããã§ãã ãã®åé¡ã¯æè¿ããããã¹ãŠã§çºçããŸããããç§ã¯ãŸã ãããçªãæ¢ããããšãã§ããŠããŸããã Jestã®package.jsonã«babelæ§æããªãããã§ããã¹ãã¹ã€ãŒãããäºæããªãããŒã¯ã³ã®ã€ã³ããŒããã§å€±æããŠããããã§ãã 1é±éåãŸã§ããã®æ§æã¯ããã€ãã®ãããžã§ã¯ãã§æ£åžžã«æ©èœããŠããããšãèŠããŠãããŠãã ããããããã£ãŠãããã¯ãªã°ã¬ãã·ã§ã³ã§ãããšæ³å®ããŠãããå ±åããå¿
èŠããããšèããŸããã
.babelrcãã¡ã€ã«ãè¿œå ãããšããã¹ãã¹ã€ãŒãã¯1ã€ãé€ããã¹ãŠã®ãã¹ãã«åæ ŒããåãäºæããªãããŒã¯ã³ã€ã³ããŒããååŸãããŸããããã¯ããã¹ãŠES6ã€ã³ããŒãã䜿çšããå€æ°ã®åæ Œãã¹ããããããšãèãããšå¥åŠã«æããŸãã .babelrcããªããšã14ã®ãã¹ããã¹ãŠã倱æããŸãã
çŸåšã®åäœããã°ã§ããå Žåã¯ãåçŸããæé ãšãå¯èœã§ããã°GitHubã«npm install
ãšnpm test
æå°éã®ãªããžããªãæäŸããŠãã ããã
ããã¯ç§ããåçããããšãã§ããŸãå®åã€ã³ã¹ããŒã«ããããšã«ããã npm run setup
ããå®è¡ããŠããnpm run test
ã
æåŸ
ãããåäœã¯äœã§ããïŒ
以åã«æ©èœããŠããJestæ§æã¯åŒãç¶ãæ©èœãããšæããŸãã ç§ã®ããªããã»ããµã¯ã以åã®ããã«babel-jestã§å®è¡ãããªããªã£ãããã§ãã
--debug
ã䜿çšããŠJestãå床å®è¡ããå°å·ããå®å
šãªæ§æãæäŸããŸãã
jest version = 16.0.2
test framework = jasmine2
config = {
"scriptPreprocessor": "/Users/myMac/Developer/works-in-progress/open-source-maintaining/scalable-react-boilerplate/config/testing/preprocessor.js",
"moduleFileExtensions": [
"js",
"jsx",
"json"
],
"moduleDirectories": [
"node_modules",
"bower_components",
"shared"
],
"rootDir": "/Users/myMac/Developer/works-in-progress/open-source-maintaining/scalable-react-boilerplate",
"name": "-Users-myMac-Developer-works-in-progress-open-source-maintaining-scalable-react-boilerplate",
"setupFiles": [],
"testRunner": "/Users/myMac/Developer/works-in-progress/open-source-maintaining/scalable-react-boilerplate/node_modules/jest-jasmine2/build/index.js",
"automock": false,
"bail": false,
"browser": false,
"cacheDirectory": "/var/folders/nq/7kdqy15d3m399326f7wtb_6w0000gn/T/jest",
"clearMocks": false,
"coveragePathIgnorePatterns": [
"/node_modules/"
],
"coverageReporters": [
"json",
"text",
"lcov",
"clover"
],
"globals": {},
"haste": {
"providesModuleNodeModules": []
},
"mocksPattern": "__mocks__",
"moduleNameMapper": {},
"modulePathIgnorePatterns": [],
"noStackTrace": false,
"notify": false,
"preset": null,
"preprocessorIgnorePatterns": [
"/node_modules/"
],
"resetModules": false,
"testEnvironment": "jest-environment-jsdom",
"testPathDirs": [
"/Users/myMac/Developer/works-in-progress/open-source-maintaining/scalable-react-boilerplate"
],
"testPathIgnorePatterns": [
"/node_modules/"
],
"testRegex": "(/__tests__/.*|\\.(test|spec))\\.jsx?$",
"testURL": "about:blank",
"timers": "real",
"useStderr": false,
"verbose": null,
"watch": false,
"cache": true,
"watchman": true,
"testcheckOptions": {
"times": 100,
"maxSize": 200
}
}
React-NativeãšJestã§ãåãåé¡ããããŸãã
次ã®ã³ãã³ãã§æ°ãããããžã§ã¯ããéå§ããå ŽåïŒ
react-native init AwesomeProject
cd AwesomeProject
次ã«ãnpm install native-base--saveã®ãããªã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŸã
ãã€ãã£ãããŒã¹ããindex.ios.jsãã¡ã€ã«ã«ã³ã³ããŒãã³ããã€ã³ããŒãããŸã
npmãã¹ãã¯ãã®ãšã©ãŒãã¹ããŒããŸãïŒ
../test/node_modules/native-base/index.js:4
'./Components/vendor/react-native-drawer'ããããã¯ãŒãã€ã³ããŒãããŸãã
^^^^^^
SyntaxErrorïŒäºæããªãããŒã¯ã³ã®ã€ã³ããŒã
ç§ã¯åãåé¡ãæ±ããŠããŸãã @ cpojerãæäŸãããªã³ã¯ã¯
ããïŒ 'transformIgnorePatterns'ã¯.... mmmm ...å®è¡ããå¿
èŠããããŸã-ç¡èŠããŸãïŒ
ããããnode_modulesããããã±ãŒãžå
ã®ãã®ã€ã³ããŒããã©ã®ããã«äœ¿çšã§ããŸããïŒ
ãã®å°éå ·ã¯ç§ãå©ããŸãã:)
{
"jest": {
"verbose": true,
"moduleDirectories": ["node_modules", "src"]
},
}
UPD1
çŸåšãç§ã®Jestèšå®ã¯æ¬¡ã®ãšããã§ãã
"jest": {
"verbose": true,
"transform": {
"^.+\\.js$": "babel-jest",
"^.+\\.(css|scss|less)$": "jest-css-modules"
},
"globals": {
"NODE_ENV": "test"
},
"moduleFileExtensions": [
"js",
"jsx"
],
"moduleDirectories": [
"node_modules",
"src/frontend",
"src/shared"
]
},
...ãããŠããã¯ç§ã®ããã«åããŠããŸã:)
ãããããããŒãŽã§ã«ã»ãã¬ãã£ã³ã
ããã«ã¡ã¯ã¿ããªãç§ã¯ãŸã ãã®åé¡ãæ±ããŠããŸãããç§ã¯reactnativeã䜿çšããŠããŸããã ãã®åé¡ã¯åžžã«jest--no-cacheã䜿çšããŠä¿®æ£ãããŸãã ãã®ãšã©ãŒãã¹ããŒããã«ããã£ãã·ã¥ã䜿çšããŠjestãæ©èœãããæ¹æ³ã¯ãããŸããïŒ
ãã®å€æãcreate-react-appã¢ããªã±ãŒã·ã§ã³ã§æ©èœãããããšãã§ããŸããã ES6ã€ã³ããŒããå«ããã¹ããã¡ã€ã«ã§ã¯ãåžžã«ãäºæããªãããŒã¯ã³ã€ã³ããŒãããååŸããŸãã ç§ã¯èŠã€ãããã¹ãŠã®ææ¡ãè©ŠããŸããã ãã£ãã·ã¥ãªãã¯åœ±é¿ãäžããŸããã ç§ã¯æããã«ãããã®ãã¡ã€ã«ãå€æããç¡èŠããããšã¯ã§ããŸããïŒãããã¯å€æãããå¿ èŠããããŸãïŒïŒã
ãããããã å¿ èŠãªæ å ±ãåãã§æäŸããŸãã
ç§ããã®åé¡ãçµéšããŠããããã§ãã
ãã£ã¡ãäžç·
ãã£ã¡ãäžç·
ESã¢ãžã¥ãŒã«ã¯Nodeã§ãµããŒããããŠãããããã©ãŠã¶ãŒã«åºè·ãããšãã«ãã«ããã€ãã©ã€ã³ïŒwebpackãrollupïŒã§ã®ã³ã³ãã€ã«ãæå³çã«åæ¢ããããããã®åé¡ãçºçããŠããå¯èœæ§ããããŸãã
babelrcã®ããã¹ããç°å¢ã§ESã¢ãžã¥ãŒã«ããCommonJSãžã®ã³ã³ãã€ã«ãæå¹ã«ããå¿ èŠããããŸããhttps ïŒ //babeljs.io/docs/usage/babelrc/#env-optionããã³https://babeljs.io/docs/ãåç §ããŠãã ããã plugins / transform-es2015-modules-commonjs /
{
"env": {
"production": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
ãåçããããšãããããŸããcpojerã æšæ¥ãããŒãç°å¢èšå®ãåé€ããããã©ã«ãã®ããŒãç°å¢ã§å®è¡ã§ããããã«ããŸãããããã¯ãjestãã°ããŒãã«ã«æ©èœããŠããããããŒãã¹ã¯ãªããã®äœ¿çšäžã¯æ©èœããŠããªãã£ãããã§ãã åé¡ã¯è§£æ±ºããããã ã£ãã®ã§ãç§ã®åé¡ã¯node-envèšå®ã«ãã£ããšæããŸãã ããããããã§ãç£èŠããå¿ èŠããããŸãã
ç·šéïŒããã¯ãŸã£ããæ©èœããŸããã§ããã @cpojerã®ä¿®æ£ã¯é åã®ããã«æ©èœããŸããã ããããšãã
@cpojerã®ä¿®æ£ã¯ç§ã®ããã«åãããããããšã
çŽ æŽããããç§ã®ããã«ãåãããããããšãïŒ
ããªãåçŽãªReactNativeã¢ããªã§ãåæ§ã®åé¡ãçºçããŠããŸãã
npm test
ãŸãã¯jest
ãããšã 'SyntaxError: Unexpected token import'
ãè¿ãããŸãã
.babelrc
{
"presets": ["react-native"]
}
.package.json
{
"name": "BeeAppy",
"version": "0.1.0",
"private": true,
"devDependencies": {
"babel-jest": "^20.0.3",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"babel-preset-react-native": "^2.0.0",
"enzyme": "^2.8.2",
"eslint": "^4.0.0",
"eslint-plugin-react": "^7.1.0",
"jest": "^20.0.4",
"react-addons-test-utils": "^15.6.0",
"react-dom": "^15.6.1",
"react-test-renderer": "^16.0.0-alpha.6"
},
"scripts": {
"start": "react-native start",
"android": "react-native run-android",
"ios": "react-native run-ios",
"test": "node node_modules/jest/bin/jest.js --watch"
},
"jest": {
"preset": "react-native"
},
"dependencies": {
"react": "16.0.0-alpha.6",
"react-native": "^0.44.0",
"react-navigation": "^1.0.0-beta.11"
}
}
@cpojerã«ãã£ãŠææ¡ãããenvã¹ããããã¯.package.jsonã«å«ãŸããŠããŸããïŒ
ãããæ¬åœã«æçœã§ãããªãã°ç³ãèš³ãããŸããïŒ
ã©ããªå©ãã§ãçŽ æŽãããã§ããããããããšã
@JessicaBarclayããã¯ããªãã®.babelrcèšå®ã«å ¥ãã¯ãã§ãã ãã®ãããªïŒ
"env": {
"development": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
ããããããšã@rlage ïŒ äžŠã¹æ¿ã:)
FWIWã @ cpojerãææ¡ãããããªãã¹ã.babelrc
æ£ããpresets
ãšplugins
ã§èšå®ããŸãããã NODE_ENV=test
ãå«ããã®ãå¿ããŠããŸããã package.json
ã
以åã¯ããäºæããªãããŒã¯ã³ã®ã€ã³ããŒããã§å€±æããŸããã
"scripts": {
...
"test": "jest",
}
ãã®åŸããã¡ã€ã«ãæ£åžžã«å€æããŸãã
"scripts": {
...
"test": "NODE_ENV=test jest",
}
@jlyman
Jestã®ããã¥ã¡ã³ãã«åºã¥ããšãJestã¯NODE_ENVãããã©ã«ãã§ãã¹ãããããã«èšå®ããŠãããããããã¯å¿ èŠãããŸããã
泚ïŒBabelã®envãªãã·ã§ã³ã䜿çšããŠãããè€éãªBabelæ§æã䜿çšããŠããå Žåã¯ãJestãNODE_ENVããã¹ããšããŠèªåçã«å®çŸ©ããããšã«æ³šæããŠãã ããã NODE_ENVãèšå®ãããŠããªãå ŽåãBabelãããã©ã«ãã§äœ¿çšãããããªéçºã»ã¯ã·ã§ã³ã¯äœ¿çšãããŸããã
ãã®.babelrcã¯ç§ã®ããã«åãããã®ã§ãïŒ
{"env": {
"development": {
"plugins": ["transform-es2015-modules-commonjs"]
},
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}}
泚ïŒå¥åŠã«èŠããŸãããéçºããŒãšãã¹ãããŒã®äž¡æ¹ãååšããå¿ èŠããããŸããååšããªãå Žåãæ©èœããŸããã
ããããç§ã¯ãã é»è©±ããŸãïŒ
node_modules/.bin/jest
ãŸãã¯package.jsonã䜿çšïŒ
{"scripts": {"test": "jest"}}
ãã¹ãããããã«NODE_ENVãèšå®ããå¿ èŠã¯ãããŸããã
@laszbaloèå³æ·±ãããšã«ããã®2çªç®ã®env
ååšãããŸãããããã§ãã éçºç°å¢ã«è¿œå ããŠãã¹ã¯ãªããã®æ瀺çãªNODE_ENV
ãã¬ãã£ãã¯ã¹ãåé€ãããšãæ©èœããŸãã ç§ãããã¥ã¡ã³ãã®ãã®éšåãèªãã ããšããããŸãããããããæ©èœããã®ã§ãçµå±ãã®è§£æ±ºçã«ãªããŸããã
@jlymanããã¥ã¡ã³ãã®ã©ã®ãœãªã¥ãŒã·ã§ã³ã§ããïŒ
@doudounannanãããã¯ã£ããããªãã£ããããã¿ãŸããã ç§ãæçµçã«è¡ã£ã解決çã¯ãç§ãããã«æçš¿ãããã®ã§ã@laszbaloãèšã£ãããã«ãããã¯ããã¥ã¡ã³ãã@ laszbaloã®ãœãªã¥ãŒã·ã§ã³ãŸãã¯NODE_ENV test
ç§ã®çŽæ¥æ³šå
¥ã®ãããããæ©èœããŠããããã§ãã
äžæè°ãªããšã«ã "transformIgnorePatterns": [ ]
ã䜿çšãããšãbabelã¯ãã¹ãæžã¿ã®ãã¡ã€ã«ãå€æããŸããã transformIgnorePatterns
ãªãã·ã§ã³ãé€å€ãããšãbabelã¯äœãããŸãã...ãã¹ãå°çšã®åçŽãª.babelrcããããŸãïŒIãããã¯ã·ã§ã³ã«ã¯webpackã䜿çšããŸãããjestã®ãã¹ãã«ã¯äœ¿çšããŸããïŒïŒ
{
"env": {
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
https://github.com/facebook/jest/issues/2550#issuecomment -290812720ããã¢ã€ãã¢ãåŸãŸãããããã¯ãïŒ770ãŸãã¯ããã§ä»ã«äœã圹ã«ç«ããªãã£ãããã§ã...
ç§ãäœããããã¯é¢ä¿ãããŸãããããã¯åžžã«åããšã©ãŒã§ãïŒ
/.../node_modules/@expo/react-native-action-sheet/ActionSheet.ios.js:3
import React from 'react';
^^^^^^
SyntaxError: Unexpected token import
at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/ScriptTransformer.js:289:17)
at Object.<anonymous> (node_modules/@expo/react-native-action-sheet/index.js:1:107)
at Object.<anonymous> (node_modules/react-native-gifted-chat/src/GiftedChat.js:10:29)
{
"env": {
"production": {
"plugins": ["transform-es2015-modules-commonjs"]
},
"development": {
"plugins": ["transform-es2015-modules-commonjs"]
},
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
},
"presets": [
"react-native"
],
"plugins": [
["module-resolver", {
"cwd": "babelrc",
}]
]
}
"jest": {
"preset": "react-native",
"setupFiles": [
"./__tests__/setup.js"
],
"testRegex": "/__tests__/.*\\.spec\\.js$"
}
ç§ã¯åãåé¡ãæ±ããŠããŸãã ç§ã¯ç§ã®åè«ã«ä»¥äžãè¿œå ããŸãã
"jest": {
"preset": "react-native",
"transformIgnorePatterns": [
"node_modules/(?!react-native|react-navigation)/"
]
}
Jestãå®è¡ãããšã次ã®ãšã©ãŒãçºçããŸãã
ReferenceErrorïŒã/ Users / caalcaz / Documents / Projects / Enterprise-app / node_modules / enzyme / .babelrcãã§æå®ãããäžæãªãã©ã°ã€ã³ãtransform-replace-object-assignãã0ã§ãã/ Users / caalcaz /ããåºæºã«ããŠè§£æ±ºããããšããŸããDocuments / Projects / Enterprise-app / node_modules / enzyme "
@calcazarããªãã®node_modules / enzyme / .babelrcã«ã¯äœããããŸããïŒ
ç§ã¯babel-jest_and_ts-jestã䜿çšããŠããã解決ããŸããã package.jsonå ïŒ
"jest": {
"modulePaths": [
"<rootDir>/src",
"<rootDir>/node_modules"
],
"globals": {
"NODE_ENV": "test"
},
"verbose": true,
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"jsx",
"json"
],
"transform": {
"^.+\\.jsx?$": "babel-jest",
"^.+\\.tsx?$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
},
"transformIgnorePatterns": ["/node_modules/(?!lodash-es)"], // <-- this allows babel to load only the node modules I need (which is lodash-es) and ignore the rest
"testRegex": "test/.*\\.spec\\.ts$",
"setupFiles": [
"<rootDir>/test/jest-pretest.ts"
],
"testEnvironment": "node",
"moduleNameMapper": {
"aurelia-(.*)": "<rootDir>/node_modules/$1"
},
// some coverage and results processing options
},
次ã«ã.babelrcïŒç§ã¯ãã¹ãã«ã®ã¿äœ¿çšããŸãïŒ
{
"env": {
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
ããã誰ããå©ããããšãé¡ã£ãŠããŸãïŒ ïŒããã¯aureliaã¢ããªçšãªã®ã§YMMVïŒ
@thinkOfaNumber
ãããç§ãèŠãŠãããã®ã§ãã åèãŸã§ã«ãç§ã¯EnzymeV3.0ãå®è¡ããŠããŸã
{
"presets": ["airbnb"],
"plugins": [
["transform-replace-object-assign", "object.assign"],
],
}
@thinkOfaNumberææ¡ãæçš¿ããŠ
"jest": {
"modulePaths": [
"<rootDir>/src",
"<rootDir>/node_modules"
],
"transformIgnorePatterns": ["/node_modules/(?!lodash-es)"], // <-- this allows babel to load only the node modules I need (which is lodash-es) and ignore the rest
ããã¯ç§ããããå¿ èŠãšããéšåã§ãã ã©ããããããšãïŒ
åãå Žæã«@rochapablo ã éãè¯ããã°ïŒ
ããããä»ã®ãšããããšã©ãŒãã¹ããŒããç¹å®ã®ãã¡ã€ã«ãã¹ããç¡èŠããŠããŸã
ç¶ãã ç§ã¯åãåé¡ãæ±ããŠããŸããããããŸã§ã®ãšããäœã解決ããŠããªãããã§ãã
ãã©ããŒã
@rochapabloãã®åé¡ã®è§£æ±ºã«
ããªããèšåããåé¡ã®ãããç§ã¯åãšããŠGiftedChat
ãæã€ã³ã³ããŒãã³ãããã¹ãã§ããŸãã...
@todorone ãè¿œå ããŠã¿ãŠãã ããïŒ
"transformIgnorePatterns": [
"node_modules/(?!react-native-gifted-chat)/"
]
@rochapabloãã³ããããããšãããããæ®å¿µãªããããã¯åœ¹ã«ç«ã¡ãŸããã§ããã transformIgnorePatterns
æ£èŠè¡šçŸã§ããã«éãã§ã¿ãŸãããã圹ã«ç«ã¡ãŸããã§ããã
"transform": {
"^.+\\.js$": "babel-jest",
"^.+\\.jsx?$": "babel-jest"
},
äžèšãåè«ã«è¿œå ããŸã
@rochapablo jest-expo
ããªã»ãããè©ŠããŸãããïŒ éãè¯ããã°ïŒ ç§ã¯ãããštransformIgnorePatterns
å¥ã®æ§æã®åé¡ã«ééããŸãã
ããã§ãç§ã«ã¯ããŸããããŸããã ããŸããŸããã€ã³ããŒããšã©ãŒãçºçããŸãã
åçãªimport
ã§ãã@testacode ãå¿
èŠãªbabelãã©ã°ã€ã³ãè¿œå ããŸãããïŒ https://facebook.github.io/jest/docs/en/webpack.html#using-with-webpack-2ã®äžéšãåç
§ããŠãã ãã
@SimenBããããšããããã¯ç§ãæ¬ ããŠãããã®ã§ãïŒ
ããã¯é¢çœãã§ãã æè¿ã®æŽæ°ã«ãããbabel-jestã®èªåè¿œå ãåé€ãããŸããã ã ããå®è¡äžïŒ
npm install babel-jest --save-dev
èšå®ã«ä»ã«äœãè¿œå ããªããšãåé¡ãä¿®æ£ãããŸããã ãšã©ãŒã¡ãã»ãŒãžã§ããããããå«ãŸããŠããªãããšãããæ確ã«ããå¿ èŠããããšæããŸã...
ç§ã¯babel-jestãã€ã³ã¹ããŒã«ããã ãã§è§£æ±ºããŸããïŒ
npm i babel-jest
ãŸãã次ã®å
容ã®.babelrc
ãã¡ã€ã«ãäœæããããšãå¿ããªãã§ãã ããã
{
"presets": ["env", "react"]
}
ããã¯ç§ã®ããã«åããŸãïŒ
.babelrc
ïŒ
{
"presets": ["env", "stage-3"],
"plugins": ["transform-class-properties"]
}
package.json
ïŒ
"scripts": {
"test": "jest --forceExit"
},
"devDependencies": {
"babel-core": "^6.11.4",
"babel-jest": "^21.2.0",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-preset-env": "^1.6.1",
"babel-preset-stage-3": "^6.24.1",
"jest": "^21.2.0"
}
@hqroããã¯ç§ã®ããã«åãããããããšãð
ç§ã®å Žåã .babelrc
ãã¡ã€ã«ã«ããããããŸããã
{
"presets": ["react", ["env", { "modules": false }]],
"plugins": [ ... ]
}
ãããŠãããã¹ããç°å¢ã代ããã«ã¢ãžã¥ãŒã«ã䜿çšããŠããããšã確èªããã ãã§æžã¿ãŸããã
{
"presets": ["react", ["env", { "modules": false }]],
"plugins": [ ... ],
"env": {
"test": {
"presets": ["react", "env"],
}
}
}
@ nemoDreamer1ã€ã®æ§æã§ãã©ã°ã€ã³ãšããªã»ãããç¹°ãè¿ããªãããšãã
{
"presets": ["react", ["env", { "modules": false }]],
"plugins": [ ... ],
"env": {
"test": {
"plugins": ["transform-es2015-modules-commonjs"],
}
}
}
äœãããããšããŠãããšã©ãŒãçºçããŸããã
> cross-env NODE_ENV=test jest --no-cache
FAIL src\views\Pay\__tests__\Pay.test.js
â Test suite failed to run
C:\Users\***\Documents\Project\***\node_modules\ne-rc\lib\index.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import _Alert from './Alert';
^^^^^^
SyntaxError: Unexpected token import
11 | * <strong i="6">@param</strong> {Array<Object>} [data] æ¯äžç§åæç诊ç»ä¿¡æ¯ data=[{},{}...]
12 | * <strong i="7">@param</strong> {Number} [defaultSelected] é»è®€éäžçäžæ
> 13 | * <strong i="8">@param</strong> {Funtion} [onClick] ç¹å»è§Šåäºä»¶
14 | * <strong i="9">@param</strong> {Number} [columnNum] äžè¡æå€å°å
15 | *
16 | * <strong i="10">@example</strong>
at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:316:17)
at Object.<anonymous> (src/components/Installment/Installment.jsx:13:13)
at Object.<anonymous> (src/components/Installment/index.js:8:20)
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 3.693s
ãããç§ã®èšå®ãã¡ã€ã«ã§ãã
* .babelrc *
{
"presets": [
[
"env",
{
"modules": false
}
],
// webpack understands the native import syntax, and uses it for tree shaking
"es2015",
"stage-2",
// Specifies what level of language features to doPay.
// Stage 2 is "draft", 4 is finished, 0 is strawman.
// See https://tc39.github.io/process-document/
"react"
// Transpile React components to JavaScript
],
"env": {
"test": {
"presets": ["env", "react", "stage-2"],
"plugins": [
"transform-es2015-modules-commonjs"
]
}
}
}
package.json
{
"main": "index.js",
"scripts": {
"dev": "cross-env NODE_ENV=development node ./server/server.js",
"api": "cross-env NODE_ENV=api node ./server/server.js",
"clean": "rm -rf dist",
"dist": "npm run clean && cross-env NODE_ENV=production webpack --config ./webpack/index.js --progress --colors",
"online": "cross-env NODE_ENV=development node ./server/online.js",
"lint": "node ./node_modules/eslint/bin/eslint.js ./src --fix",
"test": "cross-env NODE_ENV=test jest --no-cache",
"test:watch": "npm test --watch",
"stats": "npm run clean && cross-env NODE_ENV=production webpack --config ./webpack/index.js --profile --json > stats.json",
"gatest": "node ./service/gatest.js"
},
"pre-commit": [
"lint"
],
"jest": {
"verbose": true,
"modulePaths": [
"<rootDir>/src",
"<rootDir>/node_modules"
],
"setupFiles": [
"./test/setup.js"
],
"moduleFileExtensions": [
"js",
"jsx",
"json",
"md"
],
"moduleDirectories": [
"node_modules"
],
"testMatch": [
"<rootDir>/src/**/__tests__/**/*.{js,jsx,mjs}",
"<rootDir>/src/**/?(*.)(spec|test).{js,jsx,mjs}"
],
"transform": {
"^.+\\.(js|jsx|mjs)$": "<rootDir>/node_modules/babel-jest",
"^.+\\.css$": "<rootDir>/config/jest/cssTransform.js",
"^(?!.*\\.(js|jsx|mjs|css|json)$)": "<rootDir>/config/jest/fileTransform.js"
},
"testEnvironment": "jsdom"
},
"devDependencies": {
"asset-inject-html-webpack-plugin": "^0.9.1",
"autoprefixer": "^7.1.3",
"babel": "^6.23.0",
"babel-core": "^6.26.0",
"babel-eslint": "^8.2.1",
"babel-jest": "^22.4.1",
"babel-loader": "^7.1.2",
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",
"babel-preset-env": "^1.6.1",
"babel-preset-es2015": "^6.24.1",
"babel-preset-jest": "^22.4.1",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-2": "^6.24.1",
"babel-register": "^6.26.0",
"better-npm-run": "0.1.0",
"body-parser": "^1.17.2",
"chalk": "^2.1.0",
"cross-env": "^5.0.5",
"css-loader": "^0.28.5",
"deepmerge": "^2.0.1",
"enzyme": "^3.3.0",
"eslint": "^4.5.0",
"eslint-config-standard": "^11.0.0-beta.0",
"eslint-config-standard-jsx": "^4.0.2",
"eslint-plugin-import": "^2.2.0",
"eslint-plugin-node": "^5.1.1",
"eslint-plugin-promise": "^3.5.0",
"eslint-plugin-react": "^7.3.0",
"eslint-plugin-standard": "^3.0.1",
"exports-loader": "^0.6.4",
"express": "^4.15.4",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^1.1.6",
"git-repo-info": "^1.4.1",
"glob": "^7.1.2",
"happypack": "^4.0.1",
"html-loader": "^0.5.1",
"html-webpack-plugin": "^2.30.1",
"idb": "^2.0.4",
"imports-loader": "^0.7.0",
"jest": "^22.4.2",
"lodash.range": "^3.2.0",
"mocha": "^5.0.0",
"node-sass": "^4.5.3",
"node-xlsx": "^0.11.2",
"postcss-loader": "^2.0.6",
"pre-commit": "^1.2.2",
"react-hot-loader": "^3.0.0-beta.6",
"react-test-renderer": "^16.2.0",
"redux-logger": "^3.0.6",
"regenerator-runtime": "^0.11.1",
"request": "^2.74.0",
"require-reload": "^0.2.2",
"rimraf": "^2.6.0",
"sass-loader": "^6.0.6",
"script-loader": "^0.7.0",
"sinon": "^4.2.0",
"style-loader": "^0.19.1",
"uglify-js": "^3.0.28",
"url-loader": "^0.6.2",
"webpack": "^3.5.5",
"webpack-bundle-analyzer": "^2.9.0",
"webpack-dev-middleware": "^2.0.4",
"webpack-dev-server": "^2.7.1",
"webpack-hot-middleware": "^2.18.2",
"webpack-merge": "^4.1.0",
"worker-loader": "^1.1.0"
}
}
ããªã»ããã.babelrc
ã«èšå®ãããšã"env"
ãè§ãã£ã["env"]
éã«ããããšã確èªããŠãã ããã
"env": {
"test": {
"presets": [["env"], "stage-2"],
"plugins": ["transform-es2015-modules-commonjs", "dynamic-import-node"]
}
}
ç¹ã«ãæ§æã«"modules: false"
ãããå Žåã
ãŸããããã©ã«ãã§ã¯ã jestã¯node_modules
ãã¡ã€ã«ãå€æããŸãããhttpsïŒ //facebook.github.io/jest/docs/en/configuration.html#transformignorepatterns-array-stringãåç
§ããŠ
ãã®ããã import ...
ã¯node_modules
ãã¡ã€ã«ã§ã¯æ©èœããŸããã ãããç¡å¹ã«ããã«ã¯ã次ãè¿œå ã§ããŸãã
transformIgnorePatterns: []
ããªãã®jestèšå®ã«ã
ã圹ã«ç«ãŠãã°ïŒ
@florentchauveauããããšãããã®ä»äºã¯ç§ã®ããã«ã
@todorone @rochapabloçããã¯ããã«å¯Ÿãã解決çãèŠã€ããŸãããïŒ ç§ãåãåé¡ã«çŽé¢ããŠããŸã-
import * as React from 'react';
^^^^^^
SyntaxError: Unexpected token import
at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:316:17)
at Object.<anonymous> (node_modules/@expo/react-native-action-sheet/index.js:1:107)
ã䜿çšããã³ã³ããŒãã³ãã®ãã¹ãã§ã®ã¿ãã®ãšã©ãŒãçºçããŸã
GiftedChat
- httpsïŒ//github.com/FaridSafi/react-native-gifted-chatã
ããããããã¯ã @expo/react-native-action-sheet
ãES6ã¢ãžã¥ãŒã«ãšããŠåºè·ãããŠããã GiftedChat
ãå
éšã§äœ¿çšããŠããããã§ããïŒ ããããããªã»ãããè¿œå ãããå Žåã jest
/ ts-jest
ïŒããããããŸããïŒããããåŠçããã¯ãã§ãã ãããç§ã®Jestèšå®ã§ã-
"jest": {
"preset": "react-native",
"moduleFileExtensions": [
"ts",
"tsx",
"js"
],
"transform": {
"^.+\\.(js)$": "<rootDir>/node_modules/babel-jest",
"\\.(ts|tsx)$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
},
"transformIgnorePatterns": [
"node_modules/(?!rn-placeholder|react-native|react-navigation|native-base|react-native-datepicker|native-base-shoutem-theme|@shoutem/animation|@shoutem/ui|tcomb-form-native)"
],
"setupTestFrameworkScriptFile": "<rootDir>/src/__mocks__/Adapter.js",
"testRegex": "(\\.(test|spec))\\.(ts|tsx|js)$",
"testPathIgnorePatterns": [
"\\.snap$",
"<rootDir>/node_modules/",
"<rootDir>/lib/"
],
"moduleNameMapper": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/src/__mocks__/fileMock.js"
},
"cacheDirectory": ".jest/cache"
},
ãš.babelrc
-
{
"presets": ["react-native"]
}
ç§ã¯äžèšã®ã»ãšãã©ãã¹ãŠã®è§£æ±ºçãè©ŠããŸããã ãããã®ã©ããç§ã®ã·ããªãªã§ã¯æ©èœããŸããã§ããã å©ããå¿ èŠã§ãã
@ omkarjoshi-ccç§ãåãçµãã§ãããšãã«ç§ã®ããã«åããå¯äžã®ããšã¯ããšã©ãŒãçºçãããŠããããã±ãŒãžãè¿œå ããããšã§ãããç§ã®å Žåã¯æ¬¡ã®ãšããã§ãã
"transformIgnorePatterns": [
"node_modules/(?!react-native-gifted-chat)/"
]
@rochapabloããã ç§ã¯ãããè©ŠããŠã¿ãŸããã åäœããŸããã§ããã ä»ã«èŠéããŠãããã®ã¯ãããŸããïŒ ããã¯æ¬åœã«ã€ã©ã€ã©ããŸãð
ç§ã¯babel7ã䜿çšããŠããŸãããç§ããtransformIgnorePatternsãã䜿çšã§ããŸããã§ãããããŸããŸãªæ£èŠè¡šçŸãè©ŠããŸããïŒ/
ç§ãæ±ããŠããåé¡ã¯ã1ã€ã®äŸåé¢ä¿ã«ãã€ãã£ãã®es6ã¯ã©ã¹ãããããããæ¡åŒµããã¯ã©ã¹ããœãŒã¹ã«ããããšã§ãã Babelã«ãã£ãŠãã©ã³ã¹ãã€ã«ãããães5ã¯ã©ã¹ãã¯ãã€ãã£ãã¯ã©ã¹ãæ¡åŒµã§ããªããããjestã§ã©ã³ã¿ã€ã ãšã©ãŒãçºçããŸãã
ã©ãããããããbabel / prefix-envããã³ãŒããjestïŒã¿ãŒã²ããããŒãïŒã«ãã©ã³ã¹ãã€ã«ãããæ¹æ³ã®éªéã«ãªã£ãŠãããšæãå§ããŸãããããã¯ãã©ãŠã¶ã®ã¿ãŒã²ããã«åŸããªãå¯èœæ§ããããŸãããããã§ãããããŸããã
.babelrcã§ãpresent-envãã䜿çšãããšãã«ãjestã®ããã«ãã¹ãŠães5ã«åŒ·å¶ããæ¹æ³ãç¥ã£ãŠãã人ã¯ããŸããïŒ
ç§ãèããããšãã§ããå¯äžã®åé¿çã¯ãbabel-jestã䜿çšãããwebpackïŒbabel-loaderã䜿çšããå€æãããã¡ã€ã«ã®ã«ãŒã«ãæ©èœããïŒãå®è¡ããŠãããjestãå®è¡ããããšã§ã-> webpack -w
䜿çšãèããŠã
è¿œå ãã
"transformIgnorePatterns": [
"node_modules/(?!react-native-gifted-chat|@expo/react-native-action-sheet)"
]
ç§ã®ããã«åããã @rochapabloã«æè¬ã
ç§ã¯ãã®åé¡ã«èŠããã§ããŸãã ãã¹ããããŠããåºåãã©ã«ããŒã¯ã import
ãªã©ã®ES6æ§æã§ããå¿
èŠããããŸããããããšããã¹ãã§ããŸãããïŒ åºåãã¡ã€ã«ã«commonjsã衚瀺ãããŸããïŒreact-nativeã§äœ¿çšïŒ
ç§ã¯åãåé¡ã«çŽé¢ããŠããŠããã®ããŒãžã¯åé¡ã解決ããŸãïŒ
https://babeljs.io/docs/plugins/transform-es2015-modules-commonjs/
äœããã®çç±ã§ã babel-jest
代ããã«ã以äžã䜿çšãããšãç§ã«ãšã£ãŠã¯ããŸããããŸããïŒæããã«transformIgnorePatterns
å°éããŠãã ããïŒ
"transform": {
"^.+\\.(js|jsx|ts|tsx)$": "ts-jest-babel-7"
}
ãšããã§ããã®åé¡ã¯ããã§åéããå¿ èŠããããŸããïŒ å€ãã®äººã ãå°é£ã«çŽé¢ããŠããŸã
ç§ã®å Žåããã®åé¡ã¯ãbabelæ§æã®ãã¹ããã¡ã€ã«ãç¡èŠããããšãåå ã§ããããšãããããŸããã é¢ä¿ã®ãªãçç±ã§ã.babelrcã«"ignore": ["**/*.test.js"]
ããããŸããã
解決çã¯ãå®çšŒåç°å¢ã«å¯ŸããŠç¡èŠãªãã·ã§ã³ã®ã¿ãèšå®ããããšã§ãããã€ãŸãã次ã®ããã«ãªããŸãã
"env": {
"production": {
"ignore": [
"**/*.test.js"
]
}
}
ãŸãã¯ããã¹ãç°å¢ã«ç¹å¥ãªç¡èŠãã¿ãŒã³ãæå®ããããšãã§ããŸãã
ããããè©ŠããåŸããããç§ã®å Žåã§ã
ãããç§ã®èšå®ã§ãã
.babelrc
{
"plugins": [
"transform-es2015-modules-commonjs",
"transform-class-properties"
]}
é µçŽ çšïŒsetupTests.jsïŒ
import { configure } from "enzyme";
import Adapter from "enzyme-adapter-react-15";
configure({ adapter: new Adapter() });
package.json
"dependencies": {
"babel-cli": "^6.26.0",
"babel-plugin-transform-class-properties": "^6.24.1",
"eslint": "^4.19.1",
"react": "^15.4.2",
"react-dom": "^15.4.2",
"react-test-renderer": "^15.6.2",
"babel-jest": "^22.4.3",
"babel-preset-env": "^1.6.1",
"babel-preset-react": "^6.24.1",
"enzyme": "^3.3.0",
"enzyme-adapter-react-15": "^1.0.5",
"gh-pages": "^0.12.0",
"jest": "^22.4.3",
"react-addons-test-utils": "^15.4.2",
"regenerator-runtime": "^0.11.1"
},
"jest": {
"globals": {
"NODE_ENV": "test"
},
"verbose": true,
"moduleDirectories": ["node_modules", "src"],
"transform": {
"^.+\\.jsx?$": "babel-jest"
},
"moduleFileExtensions": ["js", "jsx"],
"setupTestFrameworkScriptFile": "<rootDir>/src/setupTests.js"
}
yarn add --dev babel-jest babel-core regenerator-runtime
ãããè¿œå ãããšããŸããããŸãã
ç§ã®å Žåãããã¯Windowsãšãã®æããªæš©éã®åé¡ã§ãããããããenvå€æ°ãæ£ããèšå®ããŠããŸããã§ããã
gitbashããææ Œãããcmd.exe
åãæ¿ããŠãåã³äœæ¥ãéå§ããŸããã
ç§ãæã£ãŠããjest
ã®ããã«å®çŸ©script
ïŒååãå€æŽããtest:jest
ã®ããã«test
ïŒç§ã®äžã«ã package.json
ã ãã ãã npm run test
ãå®è¡ãããšã SyntaxError: Unexpected token import
ãŸãã
root<strong i="14">@browserify</strong>:/var/machine-learning/src# npm run test
> [email protected] test /var/machine-learning/src
> jest --config /var/machine-learning/test/jest/jest.config.js
FAIL ../test/jest/__tests__/layout/analysis.test.jsx
â Test suite failed to run
/var/machine-learning/test/jest/__tests__/layout/analysis.test.jsx:6
import React from 'react';
^^^^^^
SyntaxError: Unexpected token import
at ScriptTransformer._transformAndBuildScript (../../src/node_modules/jest-runtime/build/script_transformer.js:316:17)
FAIL ../test/jest/__tests__/layout/page.test.jsx
â Test suite failed to run
/var/machine-learning/test/jest/__tests__/layout/page.test.jsx:6
import React from 'react';
^^^^^^
SyntaxError: Unexpected token import
at ScriptTransformer._transformAndBuildScript (../../src/node_modules/jest-runtime/build/script_transformer.js:316:17)
FAIL ../test/jest/__tests__/content/register.test.jsx
â Test suite failed to run
/var/machine-learning/test/jest/__tests__/content/register.test.jsx:6
import React from 'react';
^^^^^^
SyntaxError: Unexpected token import
at ScriptTransformer._transformAndBuildScript (../../src/node_modules/jest-runtime/build/script_transformer.js:316:17)
FAIL ../test/jest/__tests__/content/login.test.jsx
â Test suite failed to run
/var/machine-learning/test/jest/__tests__/content/login.test.jsx:6
import React from 'react';
^^^^^^
SyntaxError: Unexpected token import
at ScriptTransformer._transformAndBuildScript (../../src/node_modules/jest-runtime/build/script_transformer.js:316:17)
----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 0 | 0 | 0 | 0 | |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 4 failed, 4 total
Tests: 0 total
Snapshots: 0 total
Time: 3.782s
Ran all test suites.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] test: `jest --config /var/machine-learning/test/jest/jest.config.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] test script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2018-05-08T01_50_42_754Z-debug.log
察å¿ããjest.config.js
ãå®çŸ©ããŸããïŒ
module.exports = {
'verbose': true,
'collectCoverage': true,
'coverageDirectory': '/var/machine-learning',
'moduleDirectories': ['/var/machine-learning/src/node_modules'],
'transformIgnorePatterns': [
'/var/machine-learning/src/node_modules'
]
}
react-native
ãštransformIgnorePatterns
ã«ã€ããŠããããã®ããšãèŠãŠããŸãã 幞ããªããšã«ããããŠäžå¹žãªããšã«ãç§ã¯ããã䜿çšããŸããã ããã¯ãªããšãšããã©ããã®ãªããã°ã§ãã .babelrc
ãå®çŸ©ããå¿
èŠããããŸããããããšãpackage.json
jest
ãã£ã¬ã¯ãã£ããè¿œå ããå¿
èŠããããŸããã ãããããªããç§ã®åè«script
ã¯ã©ã®ããã«ããŠããã«ã«ã€ããŠç¥ã£ãŠããŸããïŒ package.json
ãå«ãåããã£ã¬ã¯ããªã«.babelrc
ãè¿œå ããããšããŸããããéããããŸããã§ããã
{
"env": {
"test": {
"presets": ["env", "stage-2", "react"]
}
}
}
泚ïŒäžèšã®åé¡ã«é¢ããç§ã®å ã®åé¡ã誰ãã远跡ãããå Žåã
ããããã®æµ®æ°ãããåŸãç§ã¯æ¬¡ã®åé¡ãèŠã€ããŸããïŒ
.babelrc.js
ãã¡ã€ã«ãæ€çŽ¢ããŸããã .babelrc
ãã¡ã€ã«ã®å Žåã®ã¿ã JSONã®ä»£ããã«JSæ§æãããå Žåãæ§æãèªã¿åããªãããããã©ã°ã€ã³ã¯äœ¿çšãããŸããã ããã¯ç§ã«ãšã£ãŠunexpected token: import
ã«ãªããŸãããbabel-7-jest
ã¯å€ãBabel 7ã³ã¢ãšã³ãžã³ã§å®è¡ããããããæ°ããããããŒã¶ã«ãã©ã°ã€ã³ã®ãµããŒããäžæãããŸããnpm i -D [email protected]
åé¡ãå®å
šã«ä¿®æ£ãããããã§ãã ç§ã®babelèšå®ã«ã¯env.test
ãããããŸããããjestèšå®ããããŸãããJestãbabel-core
æ¢ããŠããããã«èŠããŸãïŒãããã£ãŠã @babel/core
ãç¡èŠããŸãïŒãããã§ãªãå Žåã¯ãBabel 6ã«ãã©ãŒã«ããã¯ããèšå®ãã¹ãããããŸãã ãã ããææ°ã®babel-coreïŒããªããžããŒãžã§ã³ïŒãã€ã³ã¹ããŒã«ããããšãè¿œå ã®æ§æãªãã§ES6ã¢ãžã¥ãŒã«ã解æãããŸãã
kasvtvã«æè¬ããŸãïŒ ç§ã®å€æŽ.babelrc.js
ã«.babelrc
ãšã€ã³ã¹ããŒã«npm i -D [email protected]
ã ä»ãç§ã®ãã¹ãã¯babel-jest
å®è¡ãããŸã
.jsæ§æãã¡ã€ã«ãå®å šã«äœ¿çšã§ããŸãã Babelããã®ã¿ã€ãã®ãã¡ã€ã«ãèªã¿åãã®ã¯ããŒãžã§ã³7以éã®ã¿ã§ãããJestãBabelã®ããŒãžã§ã³7ã䜿çšããã«ã¯[email protected]ãå¿ èŠ
誰ããèå³ãæã£ãŠãããªããç§ã¯ç§ã®åè«ãšé µçŽ ãã¹ããæ©èœãããŸããã 察å¿ããæ§æãã¡ã€ã«ãèªç±ã«èª¿ã¹ãŠãã ããã ãŸããåããããžã§ã¯ãã®ããã³ããšã³ãéçºãæäŒãããšã«èå³ããã人ã¯ããŸããïŒ
antd
ãrc-calendar
ãªã©ã®ã©ã€ãã©ãªãã¢ãžã¥ãŒã«ã®ã€ã³ããŒãã«å€±æããããã«åæ§ã®åé¡ãçºçããŸããã解決çã¯ã transformIgnorePatterns
ãæ§æããããš
transformIgnorePatterns: [
'node_modules/?!(antd|rc-.+)/'
],
ãã¶ãmoduleDirectories
圹ã«ç«ã¡ãŸããïŒ
moduleDirectories: ['node_modules'],
ææ°ã®react-nativeããŒãžã§ã³ã«æŽæ°ããbabel 7ã«æŽæ°ããå¿ èŠããããŸããããåããšã©ãŒãçºçããŸãã
ãããã®node_modulesãtransformIgnorePatterns
è¿œå ããŠããäœãå®è¡ãããªããªã£ãããã§ãã
ç§ã®å Žåãããã¯ç§ããã¯ãBabelã§ã¢ãžã¥ãŒã«ããã©ã³ã¹ãã€ã«ããŠããªãããã§ããããããããªãã®babelrcã®test
éšåã«æ»ãããšã«ã€ããŠã®ã¹ã¿ãŒãã¬ã€ãã«ã¡ã¢ããããŸãã
@kasvtv @ willb335ç§ã¯
package.json
"babel": {
"presets": [
"./.babelrc.js"
]
},
@ material / baseã©ã€ãã©ãªã䜿çšãããšåãåé¡ãçºçããŸãã解決ããããã«ã誰ããpackage.json
ãš.babelrc
ãã¡ã€ã«ãæäŸã§ããŸããã äžèšã®ãã£ãŒãããã¯ãè©ŠããŸããããæ··ä¹±ããŸãã...
ç§ã«ãšã£ãŠã®è§£æ±ºçã¯ã.babelrcãã¡ã€ã«ã«ãenvãããªã»ãããè¿œå ããããšã§ããã
{{
"presets"ïŒ["env"ã "es2016"ã "stage-0"ã "react"]
}
ãã®ãªã³ã¯æ
å ±ã䜿çšããŠç§ã®åé¡ã解決ããŸãã
https://jestjs.io/docs/en/webpack.html
@negarinehããªãã®ãªã³ã¯ã¯æ©èœããŸãã
@haywirezãæäŸããtransformIgnorePatterns
ãœãªã¥ãŒã·ã§ã³ã䜿çšãããšã
SyntaxError: Unexpected token import
ãšã©ãŒã«
TypeError: Cannot read property 'DocumentDir' of undefined
ãšã©ãŒã ã€ãŸããããã±ãŒãžïŒrn-fetch-blobïŒã¯æªå®çŸ©ã«ãªããŸããã
ç·šéïŒ
å®éã transformIgnorePatterns: [],
ãjest.config.js
è¿œå ããã ãã§ãSyntaxErrorãTypeErrorã«å€æŽãããŸãã
@schumanndç³ãèš³ãããŸããããééããŸããããªã³ã¯ããããŒãžã«ãªãã€ã¬ã¯ããããŠããŸãã ãªã³ã¯ã§æäŸãããŠããæ§æã§ãjest.config.jsããèšå®ãããšãæ©èœããã¯ãã§ãã
ãšã©ãŒã.cssãã¡ã€ã«ã®ã€ã³ããŒãã«é¢ãããã®ã§ããå Žåããªã³ã¯ã«äŸã®ãããªã¢ãã¯ãã¡ã€ã«ãè¿œå ãããããã®æ§æã§ãidentity-obj-proxyããã€ã³ã¹ããŒã«ããã ãã§æ©èœããã¯ãã§ãã
npm install --save-dev identity-obj-proxy
jest.config.jsïŒCSSã¢ãžã¥ãŒã«çšïŒïŒ
{
"jest": {
"moduleNameMapper": {
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
"\\.(css|less)$": "identity-obj-proxy"
}
}
}
ãŸããããã¯ãããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã«ããç§ã®.babelrcãã¡ã€ã«ã§ãïŒtest.config.jsãã«ãŒãã«ããå¿ èŠããããŸãïŒïŒ
ãŸããbabel install "babel-jest"ãš "regenerator-runtime"ã䜿çšããã«ã¯ïŒ
npm --dev babel-jest babel-core regenerator-runtime
次ã«ããã®æ§æã.babelrcãã¡ã€ã«ã«è¿œå ããŸãã
{
"presets": ["env", "react"],
"plugins": ["transform-class-properties"],
"env": {
"production": {
"plugins": ["transform-es2015-modules-commonjs"]
},
"test": {
"presets": ["env", "react"],
"plugins": ["transform-export-extensions"],
"only": [
"./**/*.js",
"node_modules/jest-runtime"
]
}
}
}
ã圹ã«ç«ãŠãã°ã
https://jestjs.io/docs/en/webpack.html
ç§ã®å Žåã次ã®.babelrc
è¿œå ãããšæ©èœããŸã
{
"presets": ["env", "react"],
"env": {
"test": {
"plugins": ["transform-class-properties"]
}
}
}
次ã«ã NODE_ENV=test jest
ã䜿çšããŠãã¹ããå®è¡ããŸã
ããã¯äžéšã®äººã ã«ã®ã¿åœ¹ç«ã¡ãŸãã
ç§ã®åé¡ã¯ãjestãJSãã¡ã€ã«ã解æã§ããªãããšãåå ã§ããã 代ããã«require
䜿çšããŸããã
圌ãã ç§ã¯babelrcãã¡ã€ã«ãæã£ãŠããªãã®ã§ãããã®è§£æ±ºçã¯ã©ããæ©èœããŸãã... babel.config.jsã ãã§ãã babel.config.jsã§ã©ã®ããã«ä¿®æ£ããŸããïŒ ããããšã
babel
æ§æãšãä»ã®æ€çŽ¢ããã®ããã€ãã®è¿œå ãªãã·ã§ã³ïŒ esm
ãªãã·ã§ã³ãªã©ïŒã«ã€ããŠãäžèšã®èª¬æããå€ãã®ããšãè©ŠããŸããããäœãæ©èœããŸããã§ããã importããŒã¯ãŒãã¯ãåŒãç¶ãjestãããšã©ãŒãåºããŸããã es6ã€ã³ããŒãã䜿çšããŠã¢ãžã¥ãŒã«ããã¹ãããã®ãéåžžã«é£ããã®ã¯æ²ããããšã§ãã
æåŸã«ãããã¯ç§ã®ããã«åãããã®ã§ãïŒ ts-jest
çŸåšãã³ãŒãå
ã§ã¿ã€ãã¹ã¯ãªããã䜿çšããŠããŸãããã ts-jest
ãã¹ãŠåãããã«äœ¿çšããŠããŸãïŒã¿ã€ãã¹ã¯ãªããã¯å
éšçã«ã€ã³ããŒãããã®ä»ãã¹ãŠããµããŒãããŠããããïŒã ããã¯ãjestã«javascriptã³ãŒããæ£ããç解ãããããã ãã®ãã®ã§ãã
次ã®æé ã«åŸããŸããã
npm i -D jest typescript ts-jest @types/jest
jest.config.js
ãã¡ã€ã«å
ïŒ
transform: {
"\\.js$": "ts-jest",
transformIgnorePatterns: [],
},
Jestã¯ãtypescriptãjs
ãã¡ã€ã«ã®ã³ã³ãã€ã«ãèš±å¯ããªãããšã«ã€ããŠäžå¹³ãèšããããããŸããã 以äžã®ãªãã·ã§ã³ã䜿çšããŠtsconfig.json
ãã¡ã€ã«ãè¿œå ããŸãã
{
"compilerOptions": {
"allowJs": true,
"module": "commonjs",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": true
}
}
babel
é¢é£ãããã¹ãŠã®æ§æãšãã¡ã€ã«ãåé€ããŸããã npm
æ§æã¯æ¬¡ã®ããã«ãªããŸãã
"scripts": {
"test": "jest --runInBand --detectOpenHandles --no-cache --config ./jest.config.js"
}
ããã茞å
¥ã«é¢ããŠåæ§ã®åé¡ã«çŽé¢ããŠãã人ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
JSã€ã³ããŒãã䜿çšããŠåäœããã»ããã¢ãããåãããã¢ããŒã³ãªããžããªãæã£ãŠãã人ã¯ããŸããïŒ
JSã€ã³ããŒãã䜿çšããŠåäœããã»ããã¢ãããåãããã¢ããŒã³ãªããžããªãæã£ãŠãã人ã¯ããŸããïŒ
å ã®è°è«ãšã¯ç¡é¢ä¿ã§ããå¯èœæ§ãé«ãåæ§ã®åé¡ãæ€çŽ¢ããŠãããšãã«ãã®ããŒãžãèŠã€ãã人ãšããŠã ç§ã®åé¡ã¯ã httpsïŒ //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Dynamic_Importsã§èª¬æãããŠããé¢æ°ã®ãããªåçã€ã³ããŒãã䜿çšããããšãåå httpsïŒ//github.com/airbnb/babel-plugin-dynamic-import-nodeã§å ¥æå¯èœãªãã®æ©èœã®babelãã©ã°ã€ã³ãè¿œå ããããã«å¿ããŠ.babelrcãå€æŽããããšã§è§£æ±ºãããŸããã
{
...
"env": {
"test": {
"plugins": ["dynamic-import-node"]
}
...
}
ãªãã·ã§ã³ïŒ{ moduleïŒfalse }ãåé€ããã ãã§ãæ©èœããŸã
"presets": [
["@babel/env", {module: false} ],
"@babel/preset-react",
"@babel/preset-typescript"
]
jest configã«transformIgnorePatterns: []
ãè¿œå ããbabelrcã«transform-es2015-modules-commonjs
ãè¿œå ãããšãåé¡ã解決ããŸããã
åè«ïŒ^ 23.1.0ã
ããã«ïŒ6.26.3
@ngmgitã§ãããããã¯ãã¹ãŠã®node_modulesããã©ã³ã¹ãã€ã«ããããšãæå³ããŸãããããã¯ããŸãæé©ã§ã¯ãããŸãã...
ç§ã®å Žåã
.babelrc
ã¯æ©èœããŸãããã .babelrc
åãèšå®ãbabel.config.js
移åããããšã§åé¡ã解決ããŸããã
ã圹ã«ç«ãŠã°å¹žãã§ãã
ããã«ãããã¹ãŠã®ãã®ã¯ç§ã«ã¯ããŸããããŸããã Reactã¢ããªã±ãŒã·ã§ã³ããã¹ãããããã®Facebookã®å ¬åŒãã¹ãã©ã€ãã©ãªãèšå®ãé£ããã¬ãã«ã ãšã¯ä¿¡ããããŸãããç§ã¯8幎以äžã®çµéšãæã€éçºè ã§ãããå€ãã®åé¡ã質åãä¹ãè¶ããŠæåããã«1æ¥5æéãéãããŸãããã¹ã¿ãã¯ãªãŒããŒãããŒæã
jest + react-testing-libraryã§åäœããããã«reactã¢ããªã±ãŒã·ã§ã³ãæ§æã§ããŸãã
ããã¯ãjestãåŠçã§ããªãæ°ããæ§æãšã©ãŒãæ¯åç§ã«å«ãã§
ç§ã¯æ¬åœã«ãããããããšã§å¿ããçµãããŸãããç§ã¯ããããã«ãã£ãšæéãè²»ãããŠããŸãããç§ã¯ãããããããžã§ã¯ãã«ãã®ã©ã€ãã©ãªãè¿œå ããããšããã£ã³ã»ã«ããã§ãããã
çå£ã«ãjest + react-testing-libraryã䜿çšããŠreactã¢ããªã±ãŒã·ã§ã³ããã¹ãããã人ã®ããã®ããã©ã«ãèšå®ããªãã®ãèŠãã®ã¯éåžžã«å¥åŠã§ãã
å€ãã®SOåçãšgithubã®åé¡ã§äœæéãè©Šè¡é¯èª€ããåŸã @ cpojerã®åçã¯ç§ã®ããã«åããŸããïŒ ð
ç§ãå©ããããã€ãã®è¿œå ã®ã³ã³ããã¹ãã§ææ°ãã€æé«ã®ãã®ã§æŽæ°ãããŸããïŒ
babel.config.js
module.exports = {
"env": {
"production": {
- "plugins": ["transform-es2015-modules-commonjs"]
# new kid on the block
+ "plugins": ["@babel/plugin-transform-modules-commonjs"]
}
}
}
jest.config.js
module.exports = {
// if you're also using typescript
preset: "ts-jest",
testEnvironment: "node",
verbose: true,
// registers babel.config.js with jest
transform: {
"^.+\\.js$": "babel-jest",
},
// explicitly include any node libs using ESM modules
transformIgnorePatterns: ["node_modules/?!(<ESM module here>|<another here>|<etc...>)"],
}
babel-jest
@babel/plugin-transform-modules-commonjs
ts-jest
ïŒã¿ã€ãã¹ã¯ãªããçšïŒãã®åé¡ã¯ããããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã§jestãå®è¡ããŠããªãå Žåã«ãçºçããå¯èœæ§ããããŸã...
react-native
ãŸãã¯jest-expo
ããªã»ããã䜿çšããŠããŠããããžã§ã¯ãã«.js
ãã¡ã€ã«ãããå Žåã¯ãjestæ§æã§äžèŽããããã«transform
ãèšå®ããå¿
èŠããããŸãã
https://jestjs.io/docs/en/configuration.html#transform -objectstring-pathtotransformer--pathtotransformer-objectã®åŒã䜿çšããŸããããæ©èœããŸããã
transform: { '^.+\\.[jt]sx?$': 'babel-jest' }
pnpmãŠãŒã¶ãŒã®ããã«ããã«ã¡ã¢ãæ®ããããšæããŸãã
次ã®äŸã¯ãpnpmãã¹ãç°ãªããããpnpmãŠãŒã¶ãŒã«ã¯æ©èœããŸããã äžèšã®æ£èŠè¡šçŸã¯ããã©ããåãããnode_modules
dirã§ã®ã¿æ©èœããŸãã
/xxx/node_modules/.pnpm/[email protected][email protected][email protected]/node_modules/antd/es/input/String
åç §ïŒ https ïŒ
"transformIgnorePatterns": [
"node_modules/(?!(react-native|my-project|react-native-button)/)"
]
https://jestjs.io/docs/en/tutorial-react-native#transformignorepatterns -customization
.*
è¿œå ããŠãæåŸã®çºçã«å¯ŸããŠè² ã®å
èªã¿ã䜿çšããŸãã
node_modules/(?!(.*antd/es)/)
æãåèã«ãªãã³ã¡ã³ã
ESã¢ãžã¥ãŒã«ã¯Nodeã§ãµããŒããããŠãããããã©ãŠã¶ãŒã«åºè·ãããšãã«ãã«ããã€ãã©ã€ã³ïŒwebpackãrollupïŒã§ã®ã³ã³ãã€ã«ãæå³çã«åæ¢ããããããã®åé¡ãçºçããŠããå¯èœæ§ããããŸãã
babelrcã®ããã¹ããç°å¢ã§ESã¢ãžã¥ãŒã«ããCommonJSãžã®ã³ã³ãã€ã«ãæå¹ã«ããå¿ èŠããããŸããhttps ïŒ //babeljs.io/docs/usage/babelrc/#env-optionããã³https://babeljs.io/docs/ãåç §ããŠãã ããã plugins / transform-es2015-modules-commonjs /