Javascript Jest:TypeError:无法对属性';打印';属于'_graphql.default';因为它是未定义的

Javascript Jest:TypeError:无法对属性';打印';属于'_graphql.default';因为它是未定义的,javascript,node.js,jestjs,Javascript,Node.js,Jestjs,我不熟悉使用Jest,我正在尝试测试我的助手函数。 我现在不使用任何打字稿 这是我在运行npm运行测试时遇到的错误: TypeError:无法分解“\u graphql.default”的属性“print”,因为它未定义。 helper.test.js: import getDuplicateError from '../../helpers/auth' test('Check if email already exists', () => { error = "dupli

我不熟悉使用Jest,我正在尝试测试我的助手函数。 我现在不使用任何打字稿

这是我在运行
npm运行测试时遇到的错误:

TypeError:无法分解“\u graphql.default”的属性“print”,因为它未定义。

helper.test.js

import getDuplicateError from '../../helpers/auth'

test('Check if email already exists', () => {
  error = "duplicate_email_key";
  expect(getDuplicateError(error)).toBe(true);
})
import graphql from "graphql";
const { print } = graphql;

export const getDuplicateError = (errors) => {
  /*...*/ // Actual implementation doesn't use print
};
auth.js

import getDuplicateError from '../../helpers/auth'

test('Check if email already exists', () => {
  error = "duplicate_email_key";
  expect(getDuplicateError(error)).toBe(true);
})
import graphql from "graphql";
const { print } = graphql;

export const getDuplicateError = (errors) => {
  /*...*/ // Actual implementation doesn't use print
};
jest.config.js

export default {
  preset: 'ts-jest/presets/js-with-babel',
  testEnvironment: "node",
  transform: {
    "^.+\\.(js|jsx)?$": "babel-jest",
    '^.+\\.(ts|tsx)?$': 'ts-jest',
  },
  transformIgnorePatterns: [
    "node_modules/(?!variables/.*)"
  ],
  coveragePathIgnorePatterns: [
    "/node_modules/"
  ]
};
babel.config.json

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": true
        }
      }
    ]
  ]
}
"devDependencies": {
    "@babel/preset-env": "^7.12.17",
    "babel-jest": "^26.6.3",
    "jest": "^26.6.3",
    "ts-jest": "^26.5.1",
    "ts-node": "^9.1.1"
  }
package.json

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": true
        }
      }
    ]
  ]
}
"devDependencies": {
    "@babel/preset-env": "^7.12.17",
    "babel-jest": "^26.6.3",
    "jest": "^26.6.3",
    "ts-jest": "^26.5.1",
    "ts-node": "^9.1.1"
  }
尽管此函数没有使用
print
(它在其他函数中使用),但总体问题是,由于此问题,我现在无法测试任何内容,并且还需要能够将其用于其他函数

是否有一个配置,我需要解构工作?我不能在其他库上使用解构吗? 我肯定会喜欢这样的解构,因为我在代码中使用了大量的解构


如果需要提供任何其他信息,请告诉我。

尝试这样导入

import * as graphql from "graphql";
const {print}=graphql;

graphql
不是从
graphql
包导出的,因此它是
未定义的
。同样,当您尝试从中解构
打印
时,它会抛出错误。

尝试这样导入

import * as graphql from "graphql";
const {print}=graphql;

graphql
不是从
graphql
包导出的,因此它是
未定义的
。同样,当您试图从中解构
打印
时,它会抛出错误。

我必须为它提供一个模拟,以便它忽略解构。我不确定这是否是解决这一问题的最佳方式,但这是一个解决办法。如果有人知道另一种方法,我将感谢其他的回应

 jest.mock(
    'graphql',
    () => {
      const mPrint = { t: jest.fn().mockReturnValue('test') };
      return {
        print: jest.fn(() => mPrint),
      };
    },
    { virtual: true },
  );

我必须为这一个提供一个模拟,以便它忽略解构。我不确定这是否是解决这一问题的最佳方式,但这是一个解决办法。如果有人知道另一种方法,我将感谢其他的回应

 jest.mock(
    'graphql',
    () => {
      const mPrint = { t: jest.fn().mockReturnValue('test') };
      return {
        print: jest.fn(() => mPrint),
      };
    },
    { virtual: true },
  );

这也奏效了!为什么我需要将
*命名为graphql
,而不能将其命名为
graphql
?您正在尝试从
graphql
导入默认导出,但我相信没有Deafolt导出。只有单独的导出,因此执行
*因为graphql
将所有这些单独的导出分组在
graphql
的名称下,所以执行此方法可以用于测试,但当我尝试将其用于实际服务器时,它会给我
语法错误:请求的模块“graphql”不提供名为“print”的导出。还有别的办法吗?目前正在考虑模仿它。这也奏效了!为什么我需要将
*命名为graphql
,而不能将其命名为
graphql
?您正在尝试从
graphql
导入默认导出,但我相信没有Deafolt导出。只有单独的导出,因此执行
*因为graphql
将所有这些单独的导出分组在
graphql
的名称下,所以执行此方法可以用于测试,但当我尝试将其用于实际服务器时,它会给我
语法错误:请求的模块“graphql”不提供名为“print”的导出。还有别的办法吗?目前正在考虑嘲笑它。