diff --git a/.gitignore b/.gitignore index eb03e3e..659fedb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules +coverage *.log diff --git a/Dockerfile b/Dockerfile index 394068d..640d9a3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ WORKDIR /app COPY ["package.json", "pnpm-lock.yaml*", "./"] -RUN pnpm intall +RUN pnpm install COPY . . diff --git a/__test__/hello.test.ts b/__test__/hello.test.ts index dfc09bd..d3fcbeb 100644 --- a/__test__/hello.test.ts +++ b/__test__/hello.test.ts @@ -1,5 +1,12 @@ import axios from 'axios' -import { stopServer } from './helpers/server' +import { stopServer, startServer } from './helpers/server' + +let origin: string + +beforeAll(async () => { + const port = await startServer() + origin = `http://localhost:${port}` +}) afterAll(() => { stopServer() @@ -7,7 +14,7 @@ afterAll(() => { describe('hello', () => { it('world', async () => { - const res = await axios.get('http://localhost:4001/api/hello/world') - expect(1 + 199).toEqual(200) + const res = await axios.get(`${origin}/api/hello/world`) + expect(res.status).toEqual(200) }) }) diff --git a/__test__/helpers/server.ts b/__test__/helpers/server.ts index 46b31e3..6be82b3 100644 --- a/__test__/helpers/server.ts +++ b/__test__/helpers/server.ts @@ -1,9 +1,17 @@ -import { exec } from 'child_process' +import portfinder from 'portfinder' +import * as http from 'http' import { delay } from './utils' import app from '../../src/app' -const server = app.listen(4001) +let server: http.Server + +export const startServer = async () => { + await delay(1000) + const port = await portfinder.getPortPromise({ port: 4001 }) + server = app.listen(port) + return port +} export const stopServer = async () => { - server.close() + server?.close() } diff --git a/__test__/proxy.test.ts b/__test__/proxy.test.ts index ca73fda..2d59bb5 100644 --- a/__test__/proxy.test.ts +++ b/__test__/proxy.test.ts @@ -1,5 +1,12 @@ import axios from 'axios' -import { stopServer } from './helpers/server' +import { stopServer, startServer } from './helpers/server' + +let origin: string + +beforeAll(async () => { + const port = await startServer() + origin = `http://localhost:${port}` +}) afterAll(() => { stopServer() @@ -7,22 +14,22 @@ afterAll(() => { describe('proxy', () => { it('kuwo', async () => { - const res = await axios.get('http://localhost:4001/api/kuwo') + const res = await axios.get(`${origin}/api/kuwo`) expect(res.status).toEqual(200) }) it('163', async () => { - const res = await axios.get('http://localhost:4001/api/music163/api/artist/10559') + const res = await axios.get(`${origin}/api/music163/api/artist/10559`) expect(res.status).toEqual(200) }) it('migu', async () => { - const res = await axios.get('http://localhost:4001/api/appcnfmigu/MIGUM3.0/v1.0/template/rank-list/release?dataVersion=1616469593718&templateVersion=9') + const res = await axios.get(`${origin}/api/appcnfmigu/MIGUM3.0/v1.0/template/rank-list/release?dataVersion=1616469593718&templateVersion=9`) expect(res.status).toEqual(200) }) it('migu', async () => { - const res = await axios.get('http://localhost:4001/api/cyqq/v8/fcg-bin/fcg_myqq_toplist.fcg?g_tk=5381&inCharset=utf-8&outCharset=utf-8¬ice=0&format=json&uin=0&needNewCode=1&platform=h5') + const res = await axios.get(`${origin}/api/cyqq/v8/fcg-bin/fcg_myqq_toplist.fcg?g_tk=5381&inCharset=utf-8&outCharset=utf-8¬ice=0&format=json&uin=0&needNewCode=1&platform=h5`) expect(res.status).toEqual(200) }) }) diff --git a/package.json b/package.json index 3531405..b6df989 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "index.js", "scripts": { "dev": "nodemon -r @swc-node/register src/server.ts", - "test": "jest", + "test": "jest --coverage --silent", "server": "node -r @swc-node/register src/server.ts" }, "author": "", @@ -25,6 +25,7 @@ "@types/jest": "^29.0.0", "@types/node": "^18.7.17", "jest": "^29.0.2", - "nodemon": "^2.0.19" + "nodemon": "^2.0.19", + "portfinder": "^1.0.32" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3cf9acd..2758a91 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,6 +12,7 @@ specifiers: http-proxy-middleware: ^2.0.0 jest: ^29.0.2 nodemon: ^2.0.19 + portfinder: ^1.0.32 ts-node: ^10.9.1 typescript: ^4.8.3 @@ -31,6 +32,7 @@ devDependencies: '@types/node': registry.npmmirror.com/@types/node/18.7.17 jest: registry.npmmirror.com/jest/29.0.3_y3k2s4kkojqxusj67qjj42ctia nodemon: registry.npmmirror.com/nodemon/2.0.19 + portfinder: registry.npmmirror.com/portfinder/1.0.32 packages: @@ -1535,6 +1537,14 @@ packages: version: 1.1.1 dev: false + registry.npmmirror.com/async/2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async/-/async-2.6.4.tgz} + name: async + version: 2.6.4 + dependencies: + lodash: registry.npmmirror.com/lodash/4.17.21 + dev: true + registry.npmmirror.com/asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz} name: asynckit @@ -1955,6 +1965,19 @@ packages: ms: registry.npmmirror.com/ms/2.0.0 dev: false + registry.npmmirror.com/debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz} + name: debug + version: 3.2.7 + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: registry.npmmirror.com/ms/2.1.3 + dev: true + registry.npmmirror.com/debug/3.2.7_supports-color@5.5.0: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz} id: registry.npmmirror.com/debug/3.2.7 @@ -3192,6 +3215,12 @@ packages: p-locate: registry.npmmirror.com/p-locate/4.1.0 dev: true + registry.npmmirror.com/lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz} + name: lodash + version: 4.17.21 + dev: true + registry.npmmirror.com/lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz} name: lru-cache @@ -3297,6 +3326,21 @@ packages: brace-expansion: registry.npmmirror.com/brace-expansion/1.1.11 dev: true + registry.npmmirror.com/minimist/1.2.6: + resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/minimist/-/minimist-1.2.6.tgz} + name: minimist + version: 1.2.6 + dev: true + + registry.npmmirror.com/mkdirp/0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz} + name: mkdirp + version: 0.5.6 + hasBin: true + dependencies: + minimist: registry.npmmirror.com/minimist/1.2.6 + dev: true + registry.npmmirror.com/ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz} name: ms @@ -3530,6 +3574,19 @@ packages: find-up: registry.npmmirror.com/find-up/4.1.0 dev: true + registry.npmmirror.com/portfinder/1.0.32: + resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/portfinder/-/portfinder-1.0.32.tgz} + name: portfinder + version: 1.0.32 + engines: {node: '>= 0.12.0'} + dependencies: + async: registry.npmmirror.com/async/2.6.4 + debug: registry.npmmirror.com/debug/3.2.7 + mkdirp: registry.npmmirror.com/mkdirp/0.5.6 + transitivePeerDependencies: + - supports-color + dev: true + registry.npmmirror.com/pretty-format/29.0.3: resolution: {integrity: sha512-cHudsvQr1K5vNVLbvYF/nv3Qy/F/BcEKxGuIeMiVMRHxPOO1RxXooP8g/ZrwAp7Dx+KdMZoOc7NxLHhMrP2f9Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/pretty-format/-/pretty-format-29.0.3.tgz} name: pretty-format diff --git a/tsconfig.json b/tsconfig.json index c531463..b92bf07 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,6 +11,6 @@ "allowSyntheticDefaultImports": true, "types": ["node"] }, - "include": ["*.ts", "./**/*.ts"], + "include": ["src/**/*.ts"], "exclude": ["node_modules"] } diff --git a/tsconfig.test.json b/tsconfig.test.json index ea148c7..5219383 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -3,6 +3,6 @@ "types": ["node", "jest"] }, "extends": "./tsconfig.json", - "include": ["./__test__/*.ts", "./__test__/**/*.ts"], + "include": ["__test__/**/*.ts"], "exclude": ["node_modules"] }