moduleDirectories 密钥无法导入我的测试工具

moduleDirectories key does not make it possible to import my test utils

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

我在 package.json.

中设置了以下内容
"jest": {
    "preset": "jest-expo",
    "moduleDirectories": [
      "node_modules",
      "test-utils"
    ]
  },

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

├──node_modules/
├──test-utils/
├──src/
└──package.json

src/ 包含测试文件。我正在 src/index.test.js:

通过这个简单的测试来测试我的配置
import { assert } from 'test-utils';

const sum = (a, b) => a + b;

describe('sum', () => {
  assert({
    given: 'two numbers',
    should: 'add the numbers',
    actual: sum(1, 3),
    expected: 4,
  });
});

其中 asserttest-utils/index.js 中:

const assert = ({
  given = undefined,
  should = '',
  actual = undefined,
  expected = undefined,
} = {}) => {
  it(`given ${given}: should ${should}`, () => {
    expect(actual).toEqual(expected);
  });
};

export { assert };

如果我 运行 我的测试我得到错误:

Cannot find module 'test-utils' from 'index.test.js'

这是为什么?我的意思是我已经配置了 moduleDirectories 键?你怎么能解决这个问题?我真的很想能够将 assert 作为绝对路径而不是相对路径导入。

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

如果你有这个文件夹结构

├──node_modules/
├──src/
├──utils/
└──package.json

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

"jest": {
  "preset": "jest-expo",
  "setupFilesAfterEnv": [
    "@testing-library/react-native/cleanup-after-each"
  ],
  "moduleDirectories": [
    "node_modules",
    "utils"
  ]
},

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

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