我一直在尝试使用 jest 运行单元测试。但我不断收到如下所示的致命错误:
#
# Fatal error in , line 0
# Fatal JavaScript invalid size error 174895934
#
#
#
#FailureMessage Object: 0x7ff7b06f7e90
1: 0x10fa5ae4a node::NodePlatform::GetStackTracePrinter()::$_3::__invoke() [/usr/local/Cellar/node/17.7.1/bin/node]
2: 0x1101a4a22 V8_Fatal(char const*, ...) [/usr/local/Cellar/node/17.7.1/bin/node]
3: 0x10fc7b242 v8::internal::FactoryBase<v8::internal::Factory>::NewFixedArrayWithFiller(v8::internal::Handle<v8::internal::Map>, int, v8::internal::Handle<v8::internal::Oddball>, v8::internal::AllocationType) [/usr/local/Cellar/node/17.7.1/bin/node]
4: 0x10fdfa930 v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::ConvertElementsWithCapacity(v8::internal::Handle<v8::internal::JSObject>, v8::internal::Handle<v8::internal::FixedArrayBase>, v8::internal::ElementsKind, unsigned int, unsigned int, unsigned int) [/usr/local/Cellar/node/17.7.1/bin/node]
5: 0x10fdf9522 v8::internal::(anonymous namespace)::ElementsAccessorBase<v8::internal::(anonymous namespace)::FastPackedObjectElementsAccessor, v8::internal::(anonymous namespace)::ElementsKindTraits<(v8::internal::ElementsKind)2> >::GrowCapacity(v8::internal::Handle<v8::internal::JSObject>, unsigned int) [/usr/local/Cellar/node/17.7.1/bin/node]
6: 0x10ff2cf3d v8::internal::Runtime_GrowArrayElements(int, unsigned long*, v8::internal::Isolate*) [/usr/local/Cellar/node/17.7.1/bin/node]
7: 0x10f858ff9 Builtins_CEntry_Return1_DontSaveFPRegs_ArgvOnStack_NoBuiltinExit [/usr/local/Cellar/node/17.7.1/bin/node]
error Command failed with signal "SIGTRAP".
package.json
"ts-jest": "27.0.0",
"jest": "27.0.0",
增加最大堆大小不起作用。我该如何解决?
可能是v8引擎的原因。减少数组的长度对我有帮助。就我而言,116597277(当然不是 32 位)是 k 的限制,但我无法找出原因或其他任何内容。
const somethingToTest = require('./somethingToTest')
describe('somethingToTest()', () => {
test('linear array', () => {
let arraysToTest = []
const target = 91718346
for(let i = 1; i<=100000000; i++){
let littleArray = []
for(let k = 1; k<=100000000; k++){
littleArray.push(k)
}
arraysToTest.push(littleArray)
}
for (const arr of arraysToTest) {
const expected = arr.indexOf(target)
const actual = somethingToTest(arr, target)
expect(actual).toEqual(expected)
}
})
它看起来像应用程序中的 dep 循环。
仅在 CI 上遇到同样的问题,在本地计算机上我没有任何错误,我花了很多时间找出原因。