Javascript Jest:TypeError:无法对属性';打印';属于'_graphql.default';因为它是未定义的
我不熟悉使用Jest,我正在尝试测试我的助手函数。 我现在不使用任何打字稿 这是我在运行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
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”的导出。还有别的办法吗?目前正在考虑嘲笑它。