moduleDirectories 键无法导入我的测试实用程序

J. *_*ers 7 javascript unit-testing reactjs jestjs react-testing-library

我想用 Jest 和 测试我的 Expo React Native 应用程序@testing-lib/react-native

\n\n

我在我的package.json.

\n\n
"jest": {\n    "preset": "jest-expo",\n    "moduleDirectories": [\n      "node_modules",\n      "test-utils"\n    ]\n  },\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的文件夹结构如下所示:

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80node_modules/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80test-utils/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80src/\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80package.json\n
Run Code Online (Sandbox Code Playgroud)\n\n

src/包含测试文件。我正在通过以下简单测试来测试我的配置src/index.test.js

\n\n
"jest": {\n    "preset": "jest-expo",\n    "moduleDirectories": [\n      "node_modules",\n      "test-utils"\n    ]\n  },\n
Run Code Online (Sandbox Code Playgroud)\n\n

assert位于何处test-utils/index.js

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80node_modules/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80test-utils/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80src/\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80package.json\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我运行测试,我会收到错误:

\n\n
Cannot find module \'test-utils\' from \'index.test.js\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是为什么?我的意思是我已经配置了moduleDirectories密钥?你该如何解决这个问题?我真的很希望能够assert作为绝对路径而不是相对路径导入。

\n

J. *_*ers 4

我找到了解决方案。目前的文档很糟糕。

\n\n

如果你有这个文件夹结构

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80node_modules/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80src/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80utils/\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80package.json\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后你想像这样命名你的模块目录:

\n\n
"jest": {\n  "preset": "jest-expo",\n  "setupFilesAfterEnv": [\n    "@testing-library/react-native/cleanup-after-each"\n  ],\n  "moduleDirectories": [\n    "node_modules",\n    "utils"\n  ]\n},\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后utils/你想要的.js文件中test-utils.jstest-utils然后您可以在测试中导入。

\n\n

因此,关键是导出的模块的名称必须是文件的名称.js。并且您放入的文件夹moduleDirectories必须包含此.js文件。

\n