【问题标题】:jest, typescript Cannot find module '@forge/bridge'开玩笑,打字稿找不到模块'@forge/bridge'
【发布时间】:2021-12-09 18:10:07
【问题描述】:

我从几天以来一直在教授使用 Forge 和 Forge/bridge 测试 Jira 插件的解决方案。

我可以构建一个部署应用程序,但如果我使用该应用程序,则无法运行测试

import * as forge from '@forge/bridge 声明

我总是遇到这个错误

找不到模块“@forge/bridge”

我尝试将导入添加到“moduleNameMapper”内的 jest 配置中,但没有任何效果。

这里是我的 package.json 和开玩笑的配置

{
  "name": "roadmap-vite",
  "version": "0.0.1",
  "private": true,
  "homepage": ".",
  "scripts": {
    "dev": "vite",
    "build": "tsc && vite build",
    "serve": "vite preview",
    "test": "yarn run jest -env=jsdom --collectCoverage",
    "lint:fix": "eslint ./src --ext .jsx,.js,.ts,.tsx --quiet --fix --ignore-path ./.gitignore",
    "lint:format": "prettier  --loglevel warn --write \"./**/*.{js,jsx,ts,tsx,css,md,json}\" ",
    "lint": "yarn lint:format && yarn lint:fix "
  },
  "dependencies": {
    "@atlaskit/button": "^16.1.2",
    "@atlaskit/css-reset": "^6.1.4",
    "@atlaskit/dropdown-menu": "^10.1.9",
    "@atlaskit/form": "^8.4.1",
    "@atlaskit/icon": "^21.9.0",
    "@atlaskit/select": "^15.2.2",
    "@atlaskit/tabs": "^13.2.2",
    "@atlaskit/textarea": "^4.2.2",
    "@atlaskit/textfield": "^5.1.2",
    "@atlaskit/theme": "^12.0.0",
    "@forge/api": "^2.3.0",
    "@forge/bridge": "^2.1.1",
    "@tailwindcss/ui": "^0.7.2",
    "@types/jest": "^27.0.2",
    "mobx": "^6.3.3",
    "mobx-persist-store": "^1.0.4",
    "mobx-react-lite": "^3.2.1",
    "react": "^17.0.0",
    "react-dom": "^17.0.0",
    "react-draggable": "^4.4.4",
    "react-indiana-drag-scroll": "^2.0.1",
    "react-router-dom": "^5.3.0",
    "ts-jest": "^27.0.5"
  },
  "devDependencies": {
    "@babel/core": "^7.15.5",
    "@babel/preset-env": "^7.15.6",
    "@babel/preset-react": "^7.14.5",
    "@testing-library/dom": "^8.6.0",
    "@testing-library/jest-dom": "^5.14.1",
    "@testing-library/react": "^12.1.0",
    "@testing-library/react-hooks": "^7.0.2",
    "@testing-library/user-event": "^13.2.1",
    "@types/react": "^17.0.0",
    "@types/react-dom": "^17.0.0",
    "@types/react-router-dom": "^5.3.0",
    "@typescript-eslint/eslint-plugin": "^4.0.0",
    "@typescript-eslint/parser": "^4.0.0",
    "@vitejs/plugin-react": "^1.0.0",
    "autoprefixer": "^10.3.7",
    "babel-eslint": "^10.0.0",
    "babel-jest": "^27.2.2",
    "babel-preset-react-app": "^10.0.0",
    "eslint": "^8.0.1",
    "eslint-config-prettier": "^8.3.0",
    "eslint-config-react-app": "^6.0.0",
    "eslint-plugin-flowtype": "^5.2.0",
    "eslint-plugin-import": "^2.22.0",
    "eslint-plugin-jsx-a11y": "^6.3.1",
    "eslint-plugin-prettier": "^4.0.0",
    "eslint-plugin-react": "^7.20.3",
    "eslint-plugin-react-hooks": "^4.0.8",
    "identity-obj-proxy": "^3.0.0",
    "jest": "^27.2.2",
    "jest-circus": "^27.2.2",
    "jest-scss-transform": "^1.0.1",
    "jest-watch-typeahead": "^0.6.4",
    "postcss": "^8.3.8",
    "prettier": "^2.4.1",
    "react-test-renderer": "^17.0.2",
    "sass": "^1.42.1",
    "tailwindcss": "^2.2.16",
    "typescript": "^4.3.2",
    "vite": "^2.6.3"
  },
  "babel": {
    "env": {
      "test": {
        "presets": [
          "react-app"
        ]
      }
    }
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "jest": {
    "roots": [
      "<rootDir>/src"
    ],
    "setupFilesAfterEnv": [
      "<rootDir>/jest/jest.setup.js"
    ],
    "collectCoverageFrom": [
      "src/**/*.{js,jsx,ts,tsx}",
      "!src/**/*.d.ts"
    ],
    "coverageThreshold": {
      "global": {
        "branches": 65,
        "functions": 80,
        "lines": 80,
        "statements": 80
      }
    },
    "testMatch": [
      "<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}",
      "<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"
    ],
    "testEnvironment": "jsdom",
    "transform": {
      "^.+\\.(js|jsx|mjs|cjs|ts|tsx)$": "<rootDir>/node_modules/babel-jest",
      "^.+\\.scss$": "jest-scss-transform",
      "^.+\\.css$": "<rootDir>/jest/mocks/cssMocks.js"
    },
    "transformIgnorePatterns": [
      "[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$",
      "^.+\\.module\\.(css|sass|scss)$"
    ],
    "moduleNameMapper": {
      "^.+\\.module\\.(css|sass|scss)$": "identity-obj-proxy"
    },
    "watchPlugins": [
      "jest-watch-typeahead/filename",
      "jest-watch-typeahead/testname"
    ],
    "resetMocks": true,
    "moduleDirectories": [
      "node_modules",
      "src"
    ],
    "modulePaths": [ "<rootDir>" ]
  }
}

这里是我发布的 jira dev 帖子的链接。

Link to post and deep drive

感谢大家的帮助

【问题讨论】:

    标签: typescript jestjs tdd jira forge


    【解决方案1】:

    我找到了解决问题的方法。我像这样为这个模块创建一个模拟。

    /模拟/@forge/bridge/index.ts

    const invoke = jest.fn((key) => key)
    

    但我有一个问题,那就是现在不返回模拟模块的值。

    const invoke = jest.fn((key) => key)
    
    invoke.mockReturnValue('hallo')
    
    console.log('setup mock', invoke('test'))
    
    export { invoke }
    

    如果我记录模拟,我会看到一个返回值,在我的测试中我会看到

    调用

    是一个模拟函数,但它的返回总是未定义的

    【讨论】:

      猜你喜欢
      • 2021-05-30
      • 2019-06-17
      • 2018-12-09
      • 1970-01-01
      • 2020-01-07
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多