From 70ad6f1414d8ff706ee41ce1b05931dbe301d941 Mon Sep 17 00:00:00 2001 From: Suhun Han Date: Wed, 29 Sep 2021 13:28:27 +0900 Subject: [PATCH] fix(jest): https://github.com/facebook/jest/issues/10529 --- e2e/module.e2e-spec.ts | 110 +++++++++++++++++++++++------------------ package-lock.json | 76 +++++++--------------------- package.json | 6 +-- tsconfig.json | 1 + 4 files changed, 84 insertions(+), 109 deletions(-) diff --git a/e2e/module.e2e-spec.ts b/e2e/module.e2e-spec.ts index f8f6d56..9ed0e77 100644 --- a/e2e/module.e2e-spec.ts +++ b/e2e/module.e2e-spec.ts @@ -37,8 +37,7 @@ const TestQueues: { [key in TestQueue]: SqsConsumerOptions | SqsProducerOptions describe('SqsModule', () => { let module: TestingModule; - describe.skip('register', () => { - }); + describe.skip('register', () => {}); describe('registerAsync', () => { let module: TestingModule; @@ -53,12 +52,8 @@ describe('SqsModule', () => { SqsModule.registerAsync({ useFactory: async () => { return { - consumers: [ - TestQueues[TestQueue.Test], - ], - producers: [ - TestQueues[TestQueue.Test], - ], + consumers: [TestQueues[TestQueue.Test]], + producers: [TestQueues[TestQueue.Test]], }; }, }), @@ -79,10 +74,7 @@ describe('SqsModule', () => { @Injectable() class A { - public constructor( - public readonly sqsService: SqsService, - ) { - } + public constructor(public readonly sqsService: SqsService) {} @SqsMessageHandler(TestQueue.Test) // eslint-disable-next-line @typescript-eslint/no-empty-function @@ -125,9 +117,7 @@ describe('SqsModule', () => { ], }), ], - providers: [ - A, - ], + providers: [A], }).compile(); await module.init(); @@ -155,23 +145,30 @@ describe('SqsModule', () => { expect(sqsService.producers.has(TestQueue.Test)).toBe(true); }); - it('should call message handler when a new message has come', async (done) => { + it('should call message handler when a new message has come', () => { jest.setTimeout(30000); const sqsService = module.get(SqsService); const id = String(Math.floor(Math.random() * 1000000)); - fakeProcessor.mockImplementationOnce((message) => { - expect(message).toBeTruthy(); - expect(JSON.parse(message.Body)).toStrictEqual({ test: true }); - done(); - }); - await sqsService.send(TestQueue.Test, { - id, - body: { test: true }, - delaySeconds: 0, - groupId: 'test', - deduplicationId: id, + return new Promise(async (resolve, reject) => { + try { + fakeProcessor.mockImplementationOnce((message) => { + expect(message).toBeTruthy(); + expect(JSON.parse(message.Body)).toStrictEqual({ test: true }); + resolve(undefined); + }); + + await sqsService.send(TestQueue.Test, { + id, + body: { test: true }, + delaySeconds: 0, + groupId: 'test', + deduplicationId: id, + }); + } catch (e) { + reject(e); + } }); }); @@ -192,16 +189,20 @@ describe('SqsModule', () => { }); } - await waitForExpect(() => { - expect(fakeProcessor.mock.calls).toHaveLength(3); - for (const call of fakeProcessor.mock.calls) { - expect(call).toHaveLength(1); - expect(call[0]).toBeTruthy(); - } - }, 5000, 100); + await waitForExpect( + () => { + expect(fakeProcessor.mock.calls).toHaveLength(3); + for (const call of fakeProcessor.mock.calls) { + expect(call).toHaveLength(1); + expect(call[0]).toBeTruthy(); + } + }, + 5000, + 100, + ); }); - it('should call the registered error handler when an error occurs', async (done) => { + it('should call the registered error handler when an error occurs', () => { jest.setTimeout(10000); const sqsService = module.get(SqsService); @@ -209,27 +210,38 @@ describe('SqsModule', () => { fakeProcessor.mockImplementationOnce((message) => { throw new Error('test'); }); - fakeErrorEventHandler.mockImplementationOnce((error, message) => { - expect(error).toBeInstanceOf(Error); - expect(error.message).toContain('test'); - done(); - }); - await sqsService.send(TestQueue.Test, { - id, - body: { test: true }, - delaySeconds: 0, - groupId: 'test', - deduplicationId: id, + return new Promise(async (resolve, reject) => { + try { + fakeErrorEventHandler.mockImplementationOnce((error, message) => { + expect(error).toBeInstanceOf(Error); + expect(error.message).toContain('test'); + resolve(undefined); + }); + + await sqsService.send(TestQueue.Test, { + id, + body: { test: true }, + delaySeconds: 0, + groupId: 'test', + deduplicationId: id, + }); + } catch (e) { + reject(e); + } }); }); it('should consume a dead letter from DLQ', async () => { jest.setTimeout(10000); - await waitForExpect(() => { - expect(fakeDLQProcessor.mock.calls.length).toBe(1); - }, 9900, 500); + await waitForExpect( + () => { + expect(fakeDLQProcessor.mock.calls.length).toBe(1); + }, + 9900, + 500, + ); }); }); }); diff --git a/package-lock.json b/package-lock.json index f414874..4bb4766 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1992,7 +1992,6 @@ "version": "2.985.0", "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.985.0.tgz", "integrity": "sha512-Al1oFENrrDeKRpxlklk5sONqzCgEkrhaJ1vtIfpLYYqhNlAY+ku/z1hG1+qSlvgmljGyn7T6/zAb2EcbbAFZLQ==", - "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { @@ -2014,7 +2013,6 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true, "bin": { "uuid": "bin/uuid" } @@ -2199,8 +2197,7 @@ "node_modules/base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -2278,7 +2275,6 @@ "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", @@ -2535,7 +2531,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -2551,8 +2546,7 @@ "node_modules/debug/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/decimal.js": { "version": "10.3.1", @@ -3173,7 +3167,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true, "engines": { "node": ">=0.4.x" } @@ -3606,8 +3599,7 @@ "node_modules/ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "node_modules/ignore": { "version": "4.0.6", @@ -3910,8 +3902,7 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "node_modules/isexe": { "version": "2.0.0", @@ -5715,7 +5706,6 @@ "version": "0.15.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", - "dev": true, "engines": { "node": ">= 0.6.0" } @@ -6467,7 +6457,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true, "engines": { "node": ">=0.4.x" } @@ -6615,8 +6604,7 @@ "node_modules/sax": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", - "dev": true + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" }, "node_modules/saxes": { "version": "5.0.1", @@ -6759,7 +6747,6 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/sqs-consumer/-/sqs-consumer-5.6.0.tgz", "integrity": "sha512-p+K3UV8GwF1//Nfq7swbm/Un137IwxewzxapfTyyEVpdmzPKEDYrAzuGJvP87YWVSWzbkvxQ0By0vhamouGdxg==", - "dev": true, "license": "Apache-2.0", "dependencies": { "debug": "^4.1.1" @@ -6772,7 +6759,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/sqs-producer/-/sqs-producer-2.1.0.tgz", "integrity": "sha512-UOlBaVIyCPJ/thAUSFjbB5MTgu3HG9FzFhjN5aiu/Y/QEeqoT4Twc+o7Yappwiz6easqJHz7+kqBq7Oy1GwQ8w==", - "dev": true, "license": "Apache-2.0", "dependencies": { "aws-sdk": "^2.673.0" @@ -7302,7 +7288,6 @@ "version": "0.10.3", "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "dev": true, "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -7311,8 +7296,7 @@ "node_modules/url/node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" }, "node_modules/uuid": { "version": "8.3.2", @@ -7600,7 +7584,6 @@ "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~9.0.1" @@ -7610,7 +7593,6 @@ "version": "9.0.7", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true, "engines": { "node": ">=4.0" } @@ -9170,7 +9152,6 @@ "version": "2.985.0", "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.985.0.tgz", "integrity": "sha512-Al1oFENrrDeKRpxlklk5sONqzCgEkrhaJ1vtIfpLYYqhNlAY+ku/z1hG1+qSlvgmljGyn7T6/zAb2EcbbAFZLQ==", - "dev": true, "requires": { "buffer": "4.9.2", "events": "1.1.1", @@ -9186,8 +9167,7 @@ "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" } } }, @@ -9331,8 +9311,7 @@ "base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, "brace-expansion": { "version": "1.1.11", @@ -9394,7 +9373,6 @@ "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", @@ -9614,7 +9592,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, "requires": { "ms": "2.1.2" }, @@ -9622,8 +9599,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -10120,8 +10096,7 @@ "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "dev": true + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" }, "execa": { "version": "5.1.1", @@ -10447,8 +10422,7 @@ "ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "ignore": { "version": "4.0.6", @@ -10672,8 +10646,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", @@ -11437,8 +11410,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} + "dev": true }, "jest-regex-util": { "version": "27.0.6", @@ -12025,8 +11997,7 @@ "jmespath": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", - "dev": true + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" }, "js-tokens": { "version": "4.0.0", @@ -12600,8 +12571,7 @@ "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, "react-is": { "version": "17.0.2", @@ -12722,8 +12692,7 @@ "sax": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", - "dev": true + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" }, "saxes": { "version": "5.0.1", @@ -12842,7 +12811,6 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/sqs-consumer/-/sqs-consumer-5.6.0.tgz", "integrity": "sha512-p+K3UV8GwF1//Nfq7swbm/Un137IwxewzxapfTyyEVpdmzPKEDYrAzuGJvP87YWVSWzbkvxQ0By0vhamouGdxg==", - "dev": true, "requires": { "debug": "^4.1.1" } @@ -12851,7 +12819,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/sqs-producer/-/sqs-producer-2.1.0.tgz", "integrity": "sha512-UOlBaVIyCPJ/thAUSFjbB5MTgu3HG9FzFhjN5aiu/Y/QEeqoT4Twc+o7Yappwiz6easqJHz7+kqBq7Oy1GwQ8w==", - "dev": true, "requires": { "aws-sdk": "^2.673.0" } @@ -13237,7 +13204,6 @@ "version": "0.10.3", "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", - "dev": true, "requires": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -13246,8 +13212,7 @@ "punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" } } }, @@ -13463,8 +13428,7 @@ "version": "7.5.5", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz", "integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==", - "dev": true, - "requires": {} + "dev": true }, "xml-name-validator": { "version": "3.0.0", @@ -13476,7 +13440,6 @@ "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, "requires": { "sax": ">=0.6.0", "xmlbuilder": "~9.0.1" @@ -13485,8 +13448,7 @@ "xmlbuilder": { "version": "9.0.7", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" }, "xmlchars": { "version": "2.2.0", diff --git a/package.json b/package.json index f7e9270..5e3c6bc 100644 --- a/package.json +++ b/package.json @@ -21,10 +21,10 @@ "author": "Suhun Han ", "license": "MIT", "dependencies": { - "sqs-consumer": "^5.6.0", - "sqs-producer": "^2.1.0", + "@nestjs-plus/discovery": "^2.0.2", "aws-sdk": "^2.985.0", - "@nestjs-plus/discovery": "^2.0.2" + "sqs-consumer": "^5.6.0", + "sqs-producer": "^2.1.0" }, "devDependencies": { "@nestjs/common": "^8.0.6", diff --git a/tsconfig.json b/tsconfig.json index c76266d..3215636 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { "module": "commonjs", + "lib": ["ESNext"], "declaration": true, "noImplicitAny": false, "removeComments": true,