我遇到了一个关于 jest 的奇怪问题:更改 jest 查找其测试文件的位置似乎会破坏测试。
我已将其缩小到一个非常小的可重现案例。
这个笑话配置,在我们的
package.json
成功设置:"jest": { "testFileExtensions": ["jest"], "testPathDirs": ["Views/Test"], "scriptPreprocessor": "Views/Test/preprocessor.js", "moduleFileExtensions": [ "js", "jsx" ], "unmockedModulePathPatterns": [ "react" ] }
像这样:
npm info it worked if it ends with ok npm info using npm@2.2.0 npm info using node@v0.10.33 npm info pretest outfits@0.0.0 npm info test outfits@0.0.0 > outfits@0.0.0 test C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits > jest Using Jest CLI v0.2.2 Waiting on 2 tests... PASS Views\Test\__tests__\Components\Outfit\Description\Description.jest (3.164s) Waiting on 1 test... PASS Views\Test\__tests__\Components\Outfit\GetTheLook\GetTheLook.jest (4.475s) 2 tests passed (2 total) Run time: 5.339s npm info posttest outfits@0.0.0 npm info ok
这个笑话配置会导致两个测试之一失败。唯一的变化是更改它查找
__tests__
目录的根目录。"jest": { "testFileExtensions": ["jest"], "testPathDirs": ["Views"], "scriptPreprocessor": "Views/Test/preprocessor.js", "moduleFileExtensions": [ "js", "jsx" ], "unmockedModulePathPatterns": [ "react" ] }
有一个看起来像这样的奇怪异常(为了简洁而省略并为了可读性而重排):
Using Jest CLI v0.2.2 Waiting on 2 tests... PASS Views\Test\__tests__\Components\Outfit\Description\Description.jest (3.108s) Waiting on 1 test... FAIL Views\Test\__tests__\Components\Outfit\GetTheLook\GetTheLook.jest (3.233s) ● Get the look to › it encountered a declaration exception - TypeError: C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\nord\flux.js: C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\nord\core\actions.js: C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\nord\util\useGlobal.js: C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\nord\util\object\getDeepProperty.js: C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\nord\util\object\result.js: C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\nord\node_modules\lodash-node\compat\object\result.js: C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\nord\node_modules\lodash-node\compat\lang\isFunction.js: C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\nord\node_modules\lodash-node\compat\lang\isNative.js: Cannot call method 'replace' of undefined at C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\nord\node_modules\lodash-node\compat\lang\isNative.js:27:4 at Object.runContentWithLocalBindings (C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\jest-cli\src\lib\utils.js:357:17) at Loader._execModule (C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\jest-cli\src\HasteModuleLoader\HasteModuleLoader.js:245:9) at Loader.requireModule (C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\jest-cli\src\HasteModuleLoader\HasteModuleLoader.js:900:12) at Loader._generateMock (C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\jest-cli\src\HasteModuleLoader\HasteModuleLoader.js:276:30) at Loader.requireMock (C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\jest-cli\src\HasteModuleLoader\HasteModuleLoader.js:796:43) at Loader.requireModuleOrMock (C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\jest-cli\src\HasteModuleLoader\HasteModuleLoader.js:919:17) at C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\nord\node_modules\lodash-node\compat\lang\isFunction.js:2:16 ... at Suite.<anonymous> (C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\Views\Test\__tests__\Components\Outfit\GetTheLook\GetTheLook.jest:5:13) at env.describe_ (<anonymous>:40:25) at env.describe (<anonymous>:27:19) at describe (C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\node_modules\jest-cli\vendor\jasmine\jasmine-1.3.0.js:604:27) at C:\tfs\Nordstrom.Outfits\Nordstrom.Outfits\Views\Test\__tests__\Components\Outfit\GetTheLook\GetTheLook.jest:4:1 ... at process._tickCallback (node.js:419:13) 1 test failed, 1 test passed (2 total) Run time: 4.108s npm info outfits@0.0.0 Failed to exec test script npm ERR! Test failed. See above for more details.
我们的源代码树(为简洁起见也省略了)如下所示:
<rootDir>/
|
+- package.json
|
+-node_modules/
| |
| +-gulp/
| +-jest/
| +-react
| +-...
|
+-Views/
|
+-Components/
| |
| +-Description/Description.jsx
| +-GetTheLook/GetTheLook.jsx
|
+-Test/
|
+- preprocessor.js
|
+- __tests__/
|
+-Components/
|
+-Outfit/
|
+-Description/Description.jest
+-GetTheLook/GetTheLook.jest