- ์นด์นด์ค2021
- ์ฌ๊ท
- js
- ํธ๋ฆฌ
- BFS
- ์ํฐ๋
- ์์ฝ๋
- ๋ฐฑ์ค
- Python
- ๋ค์ต์คํธ๋ผ
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- nestjs
- ๋นํธ๋งต
- Union-Find
- ์นด์นด์ค ์ฝํ
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- go
- C++
- ์ด๋ถํ์
- ๋นํธ๋ง์คํน
- ์น๋ฆฐ์ด
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- golang
- ํ๋ฆฌ์จ๋ณด๋ฉ
- DFS
- DP
- LCs
- Today
- Total
Hello Ocean! ๐ผ
[error] Jest did not exit one second after the test run has completed. ํด๊ฒฐ ๋ณธ๋ฌธ
[error] Jest did not exit one second after the test run has completed. ํด๊ฒฐ
bba_dda 2021. 12. 21. 23:44์ ๋ฒ์ ์งํํ ์ํฐ๋ ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ์ฝ์ค 4๋ฒ์งธ ๊ณผ์ ์ ํ ์คํธ์ฝ๋ ์์ฑ ์ค ๋ฐ๊ฒฌํ ์๋ฌ์ด๋ค.
e2e test๋ฅผ ์คํํ์ ๋, test์ข ๋ฃ ํ์ ์๋์ ๊ฐ์ ๋ ธ๋ ๊ฒฝ๊ณ ๋ฉ์ธ์ง๊ฐ ๋ฑ์ฅํ๋ค!
๋ฉ์ธ์ง๋ฅผ ๊ทธ๋๋ก ํด์ํด๋ณด๋ฉด
Jest did not exit one second after the test run has completed.
→ Jest๊ฐ test๊ฐ ์๋ฃ๋๊ณ 1์ด ํ์๋ exit๋์ง ์์๋ค.
→ Jest๊ฐ ์๋๋๋ค!! (๋ญ๊ฐ ์ข ๋ฃ๋์ง ์๊ณ ๋จ์์๋ค)
This usally means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with '--detectOpenHandles' to troubleshoot this issue.
→ test์์ ์ข ๋ฃ๋์ง ์์ ๋น๋๊ธฐ ์์ ์ด ์์ ๋ ๋ฐ์ํ๋๋ผ. --detectOpenHandles ์ต์ ์ฌ์ฉ์ ๊ณ ๋ คํด๋ด๋ผ.
๊ทธ๋์ '์น์ ํ๊ฒ ํด๊ฒฐ๋ฐฉ๋ฒ๋ ์๋ ค์ฃผ๋๊ตฌ๋' ํ๊ณ --detectOpenHandles ์ต์ ์ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค.
๊ทธ๋ฌ๋ JEST --detectOpenHandles ๊ณต์ ๋ฌธ์๋ฅผ ์ฝ์ด๋ณด๋
Attempt to collect and print open handles preventing Jest from exiting cleanly. Use this in cases where you need to use --forceExit in order for Jest to exit to potentially track down the reason. This implies --runInBand, making tests run serially. Implemented using async_hooks. This option has a significant performance penalty and should only be used for debugging.
๋ด๊ฐ ์ดํดํ ๋ฐ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์คํ์ค์ธ๊ฒ ์์ผ๋ฉด Jest๊ฐ ์๋ฒฝํ ์ข ๋ฃ๋์ง ์์ผ๋, ๊ฐ์ ์ข ๋ฃ๊ฐ ํ์ํ ๋ ์ด ์ต์ ์ ์ฌ์ฉํด๋ผ.
๊ทธ๋ ์ง๋ง ์ด ์ต์ ์ ์ฑ๋ฅ์ด ๋ง์ด ์ ํ๋๋ ๋๋ฒ๊น ์๋ง ์ฌ์ฉํด๋ผ.
๊ทธ๋์ ์ด ์ต์ ๋ง๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์๋ดค๋ค.
์ข ๋ฃ๋์ง ์์ ๋น๋๊ธฐ ์์ ์ด ๋ฌด์์ธ์ง ์ฐพ์์, ๊ฑ๋ฅผ ์ข ๋ฃํด์ฃผ๋ฉด ๋ ๊ฒ์ด๋ค!
์ปค๋ฎค๋ํฐ๋ฅผ ๋ค์ ธ๋ณด๋ test ์ข ๋ฃํ์ DB connection์ closeํด๋ณด๋ผ๋ ์๊ฒฌ์ด ๊ต์ฅํ ๋ง์๋๋ฐ,
์ฐ๋ฆฌ ์ฝ๋์์๋ ๋ช ์์ ์ผ๋ก connection์ ๋ง๋ค์ด ์ฌ์ฉํ์ง ์์์, ์ด๋ป๊ฒ close๋ฅผ ํ๋ผ๋๊ฑด์ง ํ์ฐธ ํค๋งธ๋ค.
๋ต์ TypeormModule.forRoot() ์์ ์ต์ ์ผ๋ก ์ค์ ํ keepConnectionAlive ๋ฅผ false๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์ด์๋ค.
keepConnectionAlive: true ์ต์ ์ ์ดํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ ํ์๋ ์ฐ๊ฒฐ์ด ์ข ๋ฃ๋์ง ์๋๋ก ํด์ค๋ค.
๊ทธ๋์ ๋ฌธ์ ๊ฐ ๋์๋ ๊ฒ์ด๋ค!
๊ทธ๋ ์ง๋ง keepConnectionAlive: false๋ก ๋ฐ๊พธ์ ๋ค๋ฅธ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ด ์๋ฌ๋ฅผ ๋ง์ฃผํ์ ๋ฌธ๋ ํ๋ก์ ํธ ์ํ ๋น์์ ๊ธฐ์ต์ด ๋ ์ฌ๋๋ค.
keepConnectionAlive ์ต์ ์ ๊ธฐ๋ณธ ๊ฐ์ด false์ด๋ค. ๊ทธ๋ฐ๋ฐ ํ๋ก์ ํธ ์งํ์ค์ ์์ ๊ฐ์ ์๋ฌ๊ฐ ์๊ฒจ์, ์ ์๋ฌ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด keepConnectionAlive: true์ ์ถ๊ฐํ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ ๋ค๋ฉด, ์ด ์ค๋ณต ์ปค๋ฅ์ ์๋ฌ๋ ์ ๋ฐ์ํ๋ ๊ฒ์ผ๊น?
๋ต์ e2e test ์ฝ๋์ ์์๋ค.
app.init์ beforeEach ์ฆ, ๋งค test๋ง๋ค ํ๊ณ ์์๊ธฐ ๋๋ฌธ์ด๋ค.
๋งค test๋ง๋ค init์ ํ๋, default ์ปค๋ฅ์ ์ด ์ค๋ณต๋์ด ๋ฌธ์ ๊ฐ ๋์๋ ๊ฒ์ด๋ค.
beforeEach๋ฅผ beforeAll๋ก ๋ฐ๊พธ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๋ค.
beforeEach(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule]
}).compile();
app = moduleFixture.createNestApplication();
await app.init();
});
์๊ฐ ์ด ๋ง๋
ํ๋ก์ ํธ ์งํ ๋น์์, default connection ์ค๋ณต ์๋ฌ๊ฐ ๋ฐ์ํ์ ๋
๋ฌด์์ keepConnectionAlive: true์ ์ถ๊ฐํ๊ธฐ๋ณด๋ค
์ ์ ๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ์๊น๋ฅผ ๋จผ์ ์ดํดํ์ผ๋ฉด ์ข์ง ์์์๊น ํ๋ ์๊ฐ์ด ๋ค์๋ค.
๊ฒ์์ผ๋ก ์ฌ๋งํ error์ ํด๊ฒฐ๋ฐฉ์์ ์ฐพ์ ์ ์์ง๋ง, ์ด๋ ๊ฒ ๊ฒ์์ผ๋ก error๋ฅผ ํด๊ฒฐํด๋๊ฐ๋๊ฒ ์ข์ ํ๋์ธ๊ฐ๋ ์๊ฐํด๋ณผ ํ์๊ฐ ์์ ๊ฒ ๊ฐ๋ค.
๊ฒ์์ด ๋์๋ค๋ ๊ฒ์ด ์๋๋ค.
๋ฌด์์ ํด๊ฒฐํ๋ ค ํ๊ธฐ๋ณด๋จ ๋จผ์ ์ ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋์ง๋ฅผ ์ถฉ๋ถํ ์ดํดํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
ํํธ์ผ๋ก๋, ํ๋ก์ ํธ ์งํ ๋น์๋ณด๋ค Nest ๋ฐ test์ฝ๋ ์์ฑ์ ๋ฅ์ํด์ ธ์ ํด๊ฒฐํ ์ ์์ง ์์๋ํ๋ ์๊ฐ๋ ๋ ๋ค.
์๊ฐ์ ์ซ๊ธฐ์ง ์์ผ๋ ๋๊ธํ๊ฒ error๋ฅผ ํ๊ตฌํ ์ ์์ด ์ข๋ค.
e2e test๋ฅผ ์งํํ๋ฉด์ ๋ฐ๊ฒฌํ error๊ฐ ํ๋ ๋ ์๋๋ฐ, ๊ทธ๊ฒ๋ ์ด์ ํด๊ฒฐํด๋ณด๊ณ ์ถ๋ค!