typescript - AWS S3 - 遇到错误 “Jest 检测到以下 1 个未关闭的句柄,可能导致 Jest 无法退出”
在我的一个函数中,我正在从 AWS S3 获取一个文件并在回调中处理它。
async readJSONData(fileKey: string, callback: (output: string, custom_params?: any) => any, custom_params?: any): Promise<string[]> {
let params = {
Bucket: this.bucketName,
Key: fileKey,
};
let output : string = await this.s3.getObject(params)
.promise()
.then((res : PromiseResult<GetObjectOutput, AWSError>) => {
if (!this.isAWSError(res) || !res.Body)
throw Error
else
return res.Body.toString()
})
return callback((output), custom_params)
}
我的代码运行正常,直到我在使用此函数的类上运行 Jest 测试。测试大致如下所示:
import {MyClass} from "../ClassUsingAWSS3Fetch";
describe('aws_using_class_test', () => {
test('test case', () => {
MyClass.run(args)
.then(res => {
expect(res).toBe("expected behavior")
})
})
})
我明白
"ReferenceError: You are trying to `import` a file after the Jest environment has been torn down."并且使用 --detectOpenHandles 我得到
Jest has detected the following 1 open handle potentially keeping Jest from exiting:
● TCPWRAP
25 | };
26 | let output = await this.s3.getObject(params)
> 27 | .promise()
| ^
28 | .then((res) => {
29 | if (!this.isAWSError(res) || !res.Body)
30 | throw Error;
at features.constructor.handleRequest (node_modules/aws-sdk/lib/http/node.js:45:23)
at executeSend (node_modules/aws-sdk/lib/event_listeners.js:371:29)
at Request.SEND (node_modules/aws-sdk/lib/event_listeners.js:385:9)
at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:102:18)
at Request.emit (node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (node_modules/aws-sdk/lib/request.js:688:14)
at Request.transition (node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (node_modules/aws-sdk/lib/state_machine.js:15:12)
at node_modules/aws-sdk/lib/state_machine.js:27:10
at Request.<anonymous> (node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (node_modules/aws-sdk/lib/request.js:690:12)
at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:116:18)
at callNextListener (node_modules/aws-sdk/lib/sequential_executor.js:96:12)
at node_modules/aws-sdk/lib/event_listeners.js:270:9
at finish (node_modules/aws-sdk/lib/config.js:386:7)
at node_modules/aws-sdk/lib/config.js:404:9
at Credentials.get (node_modules/aws-sdk/lib/credentials.js:127:7)
at getAsyncCredentials (node_modules/aws-sdk/lib/config.js:398:24)
at Config.getCredentials (node_modules/aws-sdk/lib/config.js:418:9)
at Request.SIGN (node_modules/aws-sdk/lib/event_listeners.js:241:22)
at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:102:18)
at callNextListener (node_modules/aws-sdk/lib/sequential_executor.js:96:12)
at Request.discoverEndpoint (node_modules/aws-sdk/lib/discover_endpoint.js:365:7)
at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:102:18)
at Request.emit (node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (node_modules/aws-sdk/lib/request.js:688:14)
at Request.transition (node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (node_modules/aws-sdk/lib/state_machine.js:15:12)
at node_modules/aws-sdk/lib/state_machine.js:27:10
at Request.<anonymous> (node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (node_modules/aws-sdk/lib/request.js:690:12)
at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:116:18)
at Request.emit (node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (node_modules/aws-sdk/lib/request.js:688:14)
at Request.transition (node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (node_modules/aws-sdk/lib/state_machine.js:15:12)
at node_modules/aws-sdk/lib/state_machine.js:27:10
at Request.<anonymous> (node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (node_modules/aws-sdk/lib/request.js:690:12)
at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:116:18)
at Request.emit (node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (node_modules/aws-sdk/lib/request.js:688:14)
at Request.transition (node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (node_modules/aws-sdk/lib/state_machine.js:15:12)
at node_modules/aws-sdk/lib/state_machine.js:27:10
at Request.<anonymous> (node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (node_modules/aws-sdk/lib/request.js:690:12)
at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:116:18)
at callNextListener (node_modules/aws-sdk/lib/sequential_executor.js:96:12)
at node_modules/aws-sdk/lib/event_listeners.js:86:9
at finish (node_modules/aws-sdk/lib/config.js:386:7)
at node_modules/aws-sdk/lib/config.js:404:9
at Credentials.get (node_modules/aws-sdk/lib/credentials.js:127:7)
at getAsyncCredentials (node_modules/aws-sdk/lib/config.js:398:24)
at Config.getCredentials (node_modules/aws-sdk/lib/config.js:418:9)
at Request.VALIDATE_CREDENTIALS (node_modules/aws-sdk/lib/event_listeners.js:81:26)
at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:102:18)
at Request.emit (node_modules/aws-sdk/lib/sequential_executor.js:78:10)
at Request.emit (node_modules/aws-sdk/lib/request.js:688:14)
at Request.transition (node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (node_modules/aws-sdk/lib/state_machine.js:15:12)
at Request.runTo (node_modules/aws-sdk/lib/request.js:408:15)
at node_modules/aws-sdk/lib/request.js:797:12
at Request.promise (node_modules/aws-sdk/lib/request.js:783:12)
at S3Reader.readJSONData (build/helpers/s3-reader.js:27:14)
at Function.classifyProduct (build/modules/scrape-deals/lib/classifier/classifierClass.js:48:19)
at Function.classify (build/modules/scrape-deals/lib/classifier/classifierClass.js:36:66)
at Object.<anonymous> (build/__tests__/classifier.js:6:43)
我理解正确吗,AWS S3 正在打开一个套接字并保持其活跃状态——而在执行测试时,Jest 不喜欢这样?