使用 Jest 的 ReactJS 测试失败:无法读取未定义的 属性 'buffer'
ReactJS testing with Jest fails: Cannot read property 'buffer' of undefined
当我尝试测试 React 组件时 LoginForm.js
我在 LoginForm 中遇到错误。我在 LoginForm 中需要一个名为 joi
的模块。
TypeError: /home/jaisonjustus/project/captainmice/src/components/LoginForm/test/LoginForm.js: /home/jaisonjustus/project/captainmice/src/components/LoginForm/src/jsx/LoginForm.jsx: /home/jaisonjustus/project/captainmice/node_modules/joi/index.js: /home/jaisonjustus/project/captainmice/node_modules/joi/lib/index.js: /home/jaisonjustus/project/captainmice/node_modules/joi/lib/cast.js: /home/jaisonjustus/project/captainmice/node_modules/joi/lib/string.js: Cannot read property 'buffer' of undefined
at Socket.self [as bytesWritten] (net.js:688:8)
at _getMetadata (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/moduleMocker.js:279:49)
at _getMetadata (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/moduleMocker.js:286:23)
at _getMetadata (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/moduleMocker.js:279:27)
at Object.module.exports.getMetadata (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/moduleMocker.js:388:20)
at Loader._generateMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:282:56)
at Loader.requireMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:796:43)
at Loader.requireModuleOrMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:919:17)
at /home/jaisonjustus/project/captainmice/node_modules/joi/lib/string.js:3:11
at Object.runContentWithLocalBindings (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/utils.js:357:17)
at Loader._execModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:245:9)
at Loader.requireModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:900:12)
at Loader.requireModuleOrMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:921:17)
at /home/jaisonjustus/project/captainmice/node_modules/joi/lib/cast.js:13:13
at Object.runContentWithLocalBindings (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/utils.js:357:17)
at Loader._execModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:245:9)
at Loader.requireModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:900:12)
at Loader.requireModuleOrMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:921:17)
at /home/jaisonjustus/project/captainmice/node_modules/joi/lib/index.js:5:12
at Object.runContentWithLocalBindings (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/utils.js:357:17)
at Loader._execModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:245:9)
at Loader.requireModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:900:12)
at Loader.requireModuleOrMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:921:17)
at /home/jaisonjustus/project/captainmice/node_modules/joi/index.js:1:85
at Object.runContentWithLocalBindings (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/utils.js:357:17)
at Loader._execModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:245:9)
at Loader.requireModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:900:12)
at Loader.requireModuleOrMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:921:17)
at /home/jaisonjustus/project/captainmice/src/components/LoginForm/src/jsx/LoginForm.jsx:3:11
at Object.runContentWithLocalBindings (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/utils.js:357:17)
at Loader._execModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:245:9)
at Loader.requireModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:900:12)
at Loader.requireModuleOrMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:921:17)
at /home/jaisonjustus/project/captainmice/src/components/LoginForm/test/LoginForm.js:6:17
at Object.runContentWithLocalBindings (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/utils.js:357:17)
at Loader._execModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:245:9)
at Loader.requireModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:900:12)
at jasmineTestRunner (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/jasmineTestRunner/jasmineTestRunner.js:239:16)
at /home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/TestRunner.js:371:12
at _fulfilled (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/node_modules/q/q.js:798:54)
at self.promiseDispatch.done (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/node_modules/q/q.js:827:30)
at Promise.promise.promiseDispatch (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/node_modules/q/q.js:760:13)
at /home/jaisonjustus/project/captainmice/node_modules/jest-cli/node_modules/q/q.js:574:44
at flush (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/node_modules/q/q.js:108:17)
at /home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/FakeTimers.js:259:7
at process._tickCallback (node.js:419:13)
文件夹结构
node_modules/
jest-preprocessor.js
src/
components/
LoginForm/
src/
jsx/
LoginForm.jsx
LoginForm.scss
test/
LoginForm.js
Jest 配置
{
rootDir: 'src',
testDirectoryName: 'test',
testPathDirs: [ 'components' ],
modulePathIgnorePatterns: [ '../node_modules/' ],
scriptPreprocessor: '../jest-preprocess.js',
moduleFileExtensions: [ 'js', 'jsx', 'json' ],
unmockedModulePathPatterns: [
'../node_modules/react’,
'../node_modules/joi’
]
}
这是我的workaround
This bug was really frustrating but now I'm using jest.autoMockOff();
at the top of my test file and it works fine. Presumably I'll be able to manually use jest.mock(..)
on individual files but I haven't tried it yet.
更新:a fix 不需要您关闭自动模拟。
当我尝试测试 React 组件时 LoginForm.js
我在 LoginForm 中遇到错误。我在 LoginForm 中需要一个名为 joi
的模块。
TypeError: /home/jaisonjustus/project/captainmice/src/components/LoginForm/test/LoginForm.js: /home/jaisonjustus/project/captainmice/src/components/LoginForm/src/jsx/LoginForm.jsx: /home/jaisonjustus/project/captainmice/node_modules/joi/index.js: /home/jaisonjustus/project/captainmice/node_modules/joi/lib/index.js: /home/jaisonjustus/project/captainmice/node_modules/joi/lib/cast.js: /home/jaisonjustus/project/captainmice/node_modules/joi/lib/string.js: Cannot read property 'buffer' of undefined
at Socket.self [as bytesWritten] (net.js:688:8)
at _getMetadata (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/moduleMocker.js:279:49)
at _getMetadata (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/moduleMocker.js:286:23)
at _getMetadata (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/moduleMocker.js:279:27)
at Object.module.exports.getMetadata (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/moduleMocker.js:388:20)
at Loader._generateMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:282:56)
at Loader.requireMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:796:43)
at Loader.requireModuleOrMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:919:17)
at /home/jaisonjustus/project/captainmice/node_modules/joi/lib/string.js:3:11
at Object.runContentWithLocalBindings (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/utils.js:357:17)
at Loader._execModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:245:9)
at Loader.requireModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:900:12)
at Loader.requireModuleOrMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:921:17)
at /home/jaisonjustus/project/captainmice/node_modules/joi/lib/cast.js:13:13
at Object.runContentWithLocalBindings (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/utils.js:357:17)
at Loader._execModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:245:9)
at Loader.requireModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:900:12)
at Loader.requireModuleOrMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:921:17)
at /home/jaisonjustus/project/captainmice/node_modules/joi/lib/index.js:5:12
at Object.runContentWithLocalBindings (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/utils.js:357:17)
at Loader._execModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:245:9)
at Loader.requireModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:900:12)
at Loader.requireModuleOrMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:921:17)
at /home/jaisonjustus/project/captainmice/node_modules/joi/index.js:1:85
at Object.runContentWithLocalBindings (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/utils.js:357:17)
at Loader._execModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:245:9)
at Loader.requireModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:900:12)
at Loader.requireModuleOrMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:921:17)
at /home/jaisonjustus/project/captainmice/src/components/LoginForm/src/jsx/LoginForm.jsx:3:11
at Object.runContentWithLocalBindings (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/utils.js:357:17)
at Loader._execModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:245:9)
at Loader.requireModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:900:12)
at Loader.requireModuleOrMock (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:921:17)
at /home/jaisonjustus/project/captainmice/src/components/LoginForm/test/LoginForm.js:6:17
at Object.runContentWithLocalBindings (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/utils.js:357:17)
at Loader._execModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:245:9)
at Loader.requireModule (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/HasteModuleLoader/HasteModuleLoader.js:900:12)
at jasmineTestRunner (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/jasmineTestRunner/jasmineTestRunner.js:239:16)
at /home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/TestRunner.js:371:12
at _fulfilled (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/node_modules/q/q.js:798:54)
at self.promiseDispatch.done (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/node_modules/q/q.js:827:30)
at Promise.promise.promiseDispatch (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/node_modules/q/q.js:760:13)
at /home/jaisonjustus/project/captainmice/node_modules/jest-cli/node_modules/q/q.js:574:44
at flush (/home/jaisonjustus/project/captainmice/node_modules/jest-cli/node_modules/q/q.js:108:17)
at /home/jaisonjustus/project/captainmice/node_modules/jest-cli/src/lib/FakeTimers.js:259:7
at process._tickCallback (node.js:419:13)
文件夹结构
node_modules/
jest-preprocessor.js
src/
components/
LoginForm/
src/
jsx/
LoginForm.jsx
LoginForm.scss
test/
LoginForm.js
Jest 配置
{
rootDir: 'src',
testDirectoryName: 'test',
testPathDirs: [ 'components' ],
modulePathIgnorePatterns: [ '../node_modules/' ],
scriptPreprocessor: '../jest-preprocess.js',
moduleFileExtensions: [ 'js', 'jsx', 'json' ],
unmockedModulePathPatterns: [
'../node_modules/react’,
'../node_modules/joi’
]
}
这是我的workaround
This bug was really frustrating but now I'm using
jest.autoMockOff();
at the top of my test file and it works fine. Presumably I'll be able to manually usejest.mock(..)
on individual files but I haven't tried it yet.
更新:a fix 不需要您关闭自动模拟。