开玩笑地将 ReferenceError 抛出到默认导出

时间:2021-07-16 15:28:56

标签: javascript reactjs react-native jestjs react-testing-library

Jest 无法找到 export default 的函数,但可以找到 export const。我可以重新定义所有函数的导出/导入方式,但我觉得这可能只是一个配置问题,但一直无法在文档或 github 问题上找到任何解决方案来解决它。

有谁知道一些可以用来解决这个问题的笑话配置吗?

文件:

export const MyFunction = () => {..

规格:

import { MyFunction } from "src/MyFunction";
=>   ● Pass

糟糕 文件:

export default MyFunction = () => {..

规格:

import MyFunction from "src/MyFunction";
=>   ● Test suite failed to run
    ReferenceError: MyFunction is not defined

我的jest.config.js

/*
 * For a detailed explanation regarding each configuration property, visit:
 * https://jestjs.io/docs/en/configuration.html
 */

module.exports = {
  // All imported modules in your tests should be mocked automatically
  // automock: false,

  // Automatically restore mock state between every test
  restoreMocks: true,

  // Make calling deprecated APIs throw helpful error messages
  errorOnDeprecated: true,

  // An array of directory names to be searched recursively up from the requiring module's location
  moduleDirectories: ["node_modules", "src", "test/unit"],

  // The test environment that will be used for testing
  testEnvironment: "node",

  // The glob patterns Jest uses to detect test files
  testMatch: ["**/test/**/**/*.spec.(js|jsx|ts|tsx)"],

  transformIgnorePatterns: [
    "node_modules/(?!(jest-)?react-native|react-clone-referenced-element|@react-native-community|expo(nent)?|@expo(nent)?/.*|react-navigation|@react-navigation/.*|@unimodules/.*|unimodules|sentry-expo|native-base|@sentry/.*)",
  ],

  transform: {
    "\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js",
  },

  // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped
  testPathIgnorePatterns: ["/node_modules/"],

  reporters: ["default", "jest-junit"],

  collectCoverage: true,
  coverageReporters: ["lcov", "text-summary"],
  coveragePathIgnorePatterns: [
    "/node_modules/",
    "src/img/",
    "src/styles/",
    "test/factories/",
    "test/fixtures/",
  ],

  // Whether to use watchman for file crawling
  watchman: true,

  setupFilesAfterEnv: ["@testing-library/jest-native/extend-expect"],
  preset: "jest-expo",
  globals: {
    __DEV__: true,
    THEME: true,
    SEGMENT_KEY_STORE_INFO: true,
    INITIAL_STATE: true,
    EMPTY_MESSAGE: true,
  },
};

2 个答案:

答案 0 :(得分:0)

导出默认 MyFunction = () => {.. 将此更改为 导出默认 const MyFunction = () => {..

答案 1 :(得分:0)

好吧,这里的人很愚蠢,但解决方案是将默认导出更改为: MyFunction.js

export default () => {..

即删除导出默认函数声明中的名称。希望这可以帮助遇到此问题的人。