0

嗨,我实际上需要在一些 jest 文件中将导出的文件从一个应用程序(commons)导入到其他应用程序(登录),但它没有被 jest 检测到。

笑话测试文件:

import { auth as ServiceAuth } from "@dfs/standard"
import { ContextAlert } from '@dfs/standard';

describe("login page", () => {
    it("test case 1", () => {
        const ContextAlert = useContext(ContextAlert );
        expect(ContextAlert).toBeTruthy()
    })
})

错误信息:

FAIL src/Components/LoginPage.test.js ● 测试套件运行失败

Cannot find module '@dfs/standard' from 'LoginPage.test.js'

> 1 | import { auth as ServiceAuth } from "@dfs/standard"
    | ^
  2 | import { ContextAlert } from '@dfs/standard';
  3 | 
  4 | describe("login page", () => {

  at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:299:11)
  at Object.<anonymous> (src/Components/LoginPage.test.js:1:1)

jest.config.js

module.exports = {
  transform: {
    "^.+\\.(j|t)sx?$": "babel-jest"
},
moduleNameMapper: {
  "\\.(css)$": "identity-obj-proxy",
  "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "identity- 
obj-proxy",
   }
};

但是该文件正在以相同的语法导入到组件文件中。如何在 jest 测试文件中导入文件?

4

1 回答 1

1

Jest 是一个与浏览器非常不同的环境,解析模块也不同。在 Jest 中加载的代码没有捆绑,也没有通过 Webpack 处理,因此在运行时不会解析外部代码。

要启用跨微前端导入的单元测试,您可以选择以下选项:

  • 发布该共享依赖项的模拟(以便模拟和实际实现彼此最接近)
  • 用 Jest 的moduleNameMapper配置模拟共享依赖
  • __mocks__在文件中本地模拟共享依赖项
  • 将共享依赖项发布到注册表(npm 或其他一些内部注册表,例如 artifactory)并将其作为 devDependency 安装在本地,以便 Jest 可以在本地解析它(尽管这可能需要单独构建才能在 jest/node 环境中执行)

您选择的选项取决于您组织的需求。

另见:https ://github.com/single-spa/single-spa.js.org/issues/389

于 2021-02-23T06:57:10.187 回答