找不到笑话测试模块

时间:2020-04-08 06:49:29

标签: javascript testing jestjs

我正在用jest测试我的js应用。在我的package.json中,我映射了所有的模块,例如 documentation中所述:

 "jest": {
    "moduleNameMapper": {
      "@db/(.*)": "<rootDir>/db/$1",
      "@src/(.*)": "<rootDir>/src/$1",
      "@dto/(.*)": "<rootDir>/src/dto/$1",
      "@repos/(.*)": "<rootDir>/src/repos/$1",
      "@fetchers/(.*)": "<rootDir>/src/fetchers/$1",
      "@controllers/(.*)": "<rootDir>/src/controllers/$1",
      "@parsers/(.*)": "<rootDir>/src/parsers/$1",
      "@streams/(.*)": "<rootDir>/src/streams/$1",
      "@validators/(.*)": "<rootDir>/src/validators/$1"
    }
  },

但是,当我实例化一个新的RestRepo并在顶部包含一个导入时,执行测试时会出现此错误:

Cannot find module '@db' from 'RestRepo.js'

Require stack:
  src/repos/RestRepo.js
  tests/unit/RestEndpoint.test.js

> 1 | const { RestEndpoint } = require('@db');
    |                          ^
  2 | 
  3 | class RestRepo {

我该如何解决?为什么会这样?

1 个答案:

答案 0 :(得分:0)

您可以尝试替换

"@db/(.*)": "<rootDir>/db/$1",

使用

"@db(.*)": "<rootDir>/db$1",

这样,捕获组将匹配可选的斜杠/(如果存在)和

require("@db")

将被解释为

require("<rootDir>/db");

只需添加另一个条目

"@db": "<rootDir>/db",