From 16e06dd10bd9588418d06ea524ec2b242dc3b833 Mon Sep 17 00:00:00 2001 From: kazuya kawaguchi Date: Fri, 20 Oct 2023 12:33:16 +0900 Subject: [PATCH] chore: setup integration test --- .gitignore | 1 - bun.lockb | Bin 282288 -> 313056 bytes package.json | 10 ++++++-- playground/bun/bun.spec.ts | 17 ++++++++++++++ playground/bun/index.ts | 1 - playground/bun/package.json | 3 ++- playground/deno/deno.jsonc | 3 ++- playground/deno/deno.lock | 42 ++++++++++++++++++++++++++++++++++ playground/deno/deno.spec.ts | 26 +++++++++++++++++++++ playground/deno/main.ts | 1 - playground/node/node.test.mjs | 19 +++++++++++++++ playground/node/package.json | 5 +++- tsconfig.vitest.json | 4 ++++ vitest.config.ts | 3 --- vitest.type.config.ts | 12 ++++++++++ 15 files changed, 136 insertions(+), 11 deletions(-) create mode 100644 playground/bun/bun.spec.ts create mode 100644 playground/deno/deno.lock create mode 100644 playground/deno/deno.spec.ts create mode 100644 playground/node/node.test.mjs create mode 100644 tsconfig.vitest.json create mode 100644 vitest.type.config.ts diff --git a/.gitignore b/.gitignore index 464b428..97aed75 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ dist node_modules coverage -deno.lock .DS_Store .idea diff --git a/bun.lockb b/bun.lockb index ca944ef707b4cfa139758efc85518f2e206f2bcb..e17772679513d75b132a85ca5748595e57749d29 100755 GIT binary patch delta 67126 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 XH(@qL+q(NSVV(9_^Is3MIrx77=rHi_ delta 48431 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 diff --git a/package.json b/package.json index 39efcdd..5b1ccf9 100644 --- a/package.json +++ b/package.json @@ -69,12 +69,17 @@ "prepare": "git config --local core.hooksPath .githooks", "changelog": "gh-changelogen --repo=intlify/utils", "release": "bumpp --commit \"release: v%s\" --push --tag", + "fix": "run-p lint format", "lint": "deno lint", "format": "deno fmt", "build": "unbuild", "test": "npm run test:typecheck && npm run test:unit", - "test:unit": "vitest run", - "test:typecheck": "NODE_OPTIONS=--experimental-vm-modules vitest typecheck --run", + "test:unit": "NODE_OPTIONS=--experimental-vm-modules vitest run ./src", + "test:typecheck": "vitest typecheck --config ./vitest.type.config.ts --run", + "test:e2e": "run-s test:e2e:*", + "test:e2e:node": "npm run -w example-node test", + "test:e2e:deno": "cd playground/deno && deno task test", + "test:e2e:bun": "npm run -w example-bun test", "test:coverage": "npm test -- --reporter verbose --coverage", "play:browser": "npm run -w example-browser dev", "play:node": "npm run -w example-node dev", @@ -101,6 +106,7 @@ "h3": "^1.8.1", "hono": "^3.8.1", "lint-staged": "^15.0.0", + "npm-run-all": "^4.1.5", "miniflare": "^3.20231016.0", "supertest": "^6.3.3", "typescript": "^5.2.2", diff --git a/playground/bun/bun.spec.ts b/playground/bun/bun.spec.ts new file mode 100644 index 0000000..6f7f993 --- /dev/null +++ b/playground/bun/bun.spec.ts @@ -0,0 +1,17 @@ +import { expect, test } from 'bun:test' + +test('bun integration test', async () => { + const process = Bun.spawn(['bun', 'run', './index.ts'], { + stdin: 'inherit', + cwd: import.meta.dir, + }) + await Bun.sleep(1000) + + const req = new Request('http://localhost:8124') + req.headers.set('accept-language', 'en-US,en;q=0.9,ja;q=0.8') + const res = await fetch(req) + await Bun.sleep(1000) + + expect(await res.text()).toBe('detect locale: en-US') + process.kill() +}) diff --git a/playground/bun/index.ts b/playground/bun/index.ts index d8f4638..f942106 100644 --- a/playground/bun/index.ts +++ b/playground/bun/index.ts @@ -1,7 +1,6 @@ import { getHeaderLocale } from '@intlify/utils' const port = 8124 -// @ts-ignore: this is example Bun.serve({ port, fetch(req: Request) { diff --git a/playground/bun/package.json b/playground/bun/package.json index 2806fdb..c1e2f86 100644 --- a/playground/bun/package.json +++ b/playground/bun/package.json @@ -4,7 +4,8 @@ "module": "index.ts", "type": "module", "scripts": { - "dev": "bun run index.ts" + "dev": "bun run index.ts", + "test": "bun test" }, "devDependencies": { "bun-types": "latest" diff --git a/playground/deno/deno.jsonc b/playground/deno/deno.jsonc index 3c5130f..bcd1551 100644 --- a/playground/deno/deno.jsonc +++ b/playground/deno/deno.jsonc @@ -1,5 +1,6 @@ { "tasks": { - "dev": "deno run --watch main.ts" + "dev": "deno run --watch main.ts", + "test": "deno test --allow-read=$(which deno) --allow-run --allow-net ./deno.spec.ts" } } diff --git a/playground/deno/deno.lock b/playground/deno/deno.lock new file mode 100644 index 0000000..41ad105 --- /dev/null +++ b/playground/deno/deno.lock @@ -0,0 +1,42 @@ +{ + "version": "3", + "redirects": { + "https://esm.sh/@intlify/utils": "https://esm.sh/@intlify/utils@0.10.0" + }, + "remote": { + "https://deno.land/std@0.204.0/assert/_constants.ts": "8a9da298c26750b28b326b297316cdde860bc237533b07e1337c021379e6b2a9", + "https://deno.land/std@0.204.0/assert/_diff.ts": "58e1461cc61d8eb1eacbf2a010932bf6a05b79344b02ca38095f9b805795dc48", + "https://deno.land/std@0.204.0/assert/_format.ts": "a69126e8a469009adf4cf2a50af889aca364c349797e63174884a52ff75cf4c7", + "https://deno.land/std@0.204.0/assert/assert.ts": "9a97dad6d98c238938e7540736b826440ad8c1c1e54430ca4c4e623e585607ee", + "https://deno.land/std@0.204.0/assert/assert_almost_equals.ts": "e15ca1f34d0d5e0afae63b3f5d975cbd18335a132e42b0c747d282f62ad2cd6c", + "https://deno.land/std@0.204.0/assert/assert_array_includes.ts": "6856d7f2c3544bc6e62fb4646dfefa3d1df5ff14744d1bca19f0cbaf3b0d66c9", + "https://deno.land/std@0.204.0/assert/assert_equals.ts": "d8ec8a22447fbaf2fc9d7c3ed2e66790fdb74beae3e482855d75782218d68227", + "https://deno.land/std@0.204.0/assert/assert_exists.ts": "407cb6b9fb23a835cd8d5ad804e2e2edbbbf3870e322d53f79e1c7a512e2efd7", + "https://deno.land/std@0.204.0/assert/assert_false.ts": "0ccbcaae910f52c857192ff16ea08bda40fdc79de80846c206bfc061e8c851c6", + "https://deno.land/std@0.204.0/assert/assert_greater.ts": "ae2158a2d19313bf675bf7251d31c6dc52973edb12ac64ac8fc7064152af3e63", + "https://deno.land/std@0.204.0/assert/assert_greater_or_equal.ts": "1439da5ebbe20855446cac50097ac78b9742abe8e9a43e7de1ce1426d556e89c", + "https://deno.land/std@0.204.0/assert/assert_instance_of.ts": "3aedb3d8186e120812d2b3a5dea66a6e42bf8c57a8bd927645770bd21eea554c", + "https://deno.land/std@0.204.0/assert/assert_is_error.ts": "c21113094a51a296ffaf036767d616a78a2ae5f9f7bbd464cd0197476498b94b", + "https://deno.land/std@0.204.0/assert/assert_less.ts": "aec695db57db42ec3e2b62e97e1e93db0063f5a6ec133326cc290ff4b71b47e4", + "https://deno.land/std@0.204.0/assert/assert_less_or_equal.ts": "5fa8b6a3ffa20fd0a05032fe7257bf985d207b85685fdbcd23651b70f928c848", + "https://deno.land/std@0.204.0/assert/assert_match.ts": "c4083f80600bc190309903c95e397a7c9257ff8b5ae5c7ef91e834704e672e9b", + "https://deno.land/std@0.204.0/assert/assert_not_equals.ts": "9f1acab95bd1f5fc9a1b17b8027d894509a745d91bac1718fdab51dc76831754", + "https://deno.land/std@0.204.0/assert/assert_not_instance_of.ts": "0c14d3dfd9ab7a5276ed8ed0b18c703d79a3d106102077ec437bfe7ed912bd22", + "https://deno.land/std@0.204.0/assert/assert_not_match.ts": "3796a5b0c57a1ce6c1c57883dd4286be13a26f715ea662318ab43a8491a13ab0", + "https://deno.land/std@0.204.0/assert/assert_not_strict_equals.ts": "ca6c6d645e95fbc873d25320efeb8c4c6089a9a5e09f92d7c1c4b6e935c2a6ad", + "https://deno.land/std@0.204.0/assert/assert_object_match.ts": "d8fc2867cfd92eeacf9cea621e10336b666de1874a6767b5ec48988838370b54", + "https://deno.land/std@0.204.0/assert/assert_rejects.ts": "45c59724de2701e3b1f67c391d6c71c392363635aad3f68a1b3408f9efca0057", + "https://deno.land/std@0.204.0/assert/assert_strict_equals.ts": "b1f538a7ea5f8348aeca261d4f9ca603127c665e0f2bbfeb91fa272787c87265", + "https://deno.land/std@0.204.0/assert/assert_string_includes.ts": "b821d39ebf5cb0200a348863c86d8c4c4b398e02012ce74ad15666fc4b631b0c", + "https://deno.land/std@0.204.0/assert/assert_throws.ts": "63784e951475cb7bdfd59878cd25a0931e18f6dc32a6077c454b2cd94f4f4bcd", + "https://deno.land/std@0.204.0/assert/assertion_error.ts": "4d0bde9b374dfbcbe8ac23f54f567b77024fb67dbb1906a852d67fe050d42f56", + "https://deno.land/std@0.204.0/assert/equal.ts": "9f1a46d5993966d2596c44e5858eec821859b45f783a5ee2f7a695dfc12d8ece", + "https://deno.land/std@0.204.0/assert/fail.ts": "c36353d7ae6e1f7933d45f8ea51e358c8c4b67d7e7502028598fe1fea062e278", + "https://deno.land/std@0.204.0/assert/mod.ts": "37c49a26aae2b254bbe25723434dc28cd7532e444cf0b481a97c045d110ec085", + "https://deno.land/std@0.204.0/assert/unimplemented.ts": "d56fbeecb1f108331a380f72e3e010a1f161baa6956fd0f7cf3e095ae1a4c75a", + "https://deno.land/std@0.204.0/assert/unreachable.ts": "4600dc0baf7d9c15a7f7d234f00c23bca8f3eba8b140286aaca7aa998cf9a536", + "https://deno.land/std@0.204.0/fmt/colors.ts": "c51c4642678eb690dcf5ffee5918b675bf01a33fba82acf303701ae1a4f8c8d9", + "https://esm.sh/@intlify/utils@0.10.0": "0fe85fa01c25d7db7f11169ff8988961fcdd7e336b40456647495cfcc3923837", + "https://esm.sh/v133/@intlify/utils@0.10.0/denonext/utils.mjs": "302b975d6ff52aa5bc2932463f1bf65e54b18d26d3ca486f13813bcd13baae31" + } +} diff --git a/playground/deno/deno.spec.ts b/playground/deno/deno.spec.ts new file mode 100644 index 0000000..096c4be --- /dev/null +++ b/playground/deno/deno.spec.ts @@ -0,0 +1,26 @@ +import { assertEquals } from 'https://deno.land/std@0.204.0/assert/mod.ts' + +const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)) + +Deno.test('deno integration test', async () => { + const command = new Deno.Command(Deno.execPath(), { + stdout: 'null', + args: [ + 'run', + '--allow-net', + './main.ts', + ], + }) + const process = command.spawn() + await sleep(1000) + + const req = new Request('http://localhost:8125') + req.headers.set('accept-language', 'en-US,en;q=0.9,ja;q=0.8') + const res = await fetch(req) + await sleep(1000) + + assertEquals('detect accpect-language: en-US,en,ja', await res.text()) + + process.kill('SIGINT') + await process.status +}) diff --git a/playground/deno/main.ts b/playground/deno/main.ts index a3b3c24..227b0ff 100644 --- a/playground/deno/main.ts +++ b/playground/deno/main.ts @@ -2,7 +2,6 @@ import { getHeaderLanguages } from 'https://esm.sh/@intlify/utils' const port = 8125 -// @ts-ignore: this is example Deno.serve({ port, }, (req: Request) => { diff --git a/playground/node/node.test.mjs b/playground/node/node.test.mjs new file mode 100644 index 0000000..d108533 --- /dev/null +++ b/playground/node/node.test.mjs @@ -0,0 +1,19 @@ +import assert from 'node:assert' +import test from 'node:test' +import { spawn } from 'node:child_process' +import { fetch } from 'ofetch' + +const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)) + +test('node integration test', async () => { + const child = spawn('npx', ['tsx', './index.ts'], { cwd: process.cwd(), stdio: 'inherit' }) + await sleep(1000) + + const req = new Request('http://localhost:8123') + req.headers.set('accept-language', 'en-US,en;q=0.9,ja;q=0.8') + const res = await fetch(req) + await sleep(1000) + + assert.deepEqual('detect accpect-language: en-US,en,ja', await res.text()) + child.kill('SIGINT') +}) diff --git a/playground/node/package.json b/playground/node/package.json index a45c225..9f5e43e 100644 --- a/playground/node/package.json +++ b/playground/node/package.json @@ -1,13 +1,16 @@ { "name": "example-node", "private": true, + "type": "module", "scripts": { - "dev": "npx tsx index.ts" + "dev": "npx tsx index.ts", + "test": "node --test" }, "dependencies": { "@intlify/utils": "npm:@intlify/utils-edge@latest" }, "devDependencies": { + "ofetch": "^1.3.3", "@types/node": "^20.6.0", "typescript": "^5.2.2" } diff --git a/tsconfig.vitest.json b/tsconfig.vitest.json new file mode 100644 index 0000000..7c4dd51 --- /dev/null +++ b/tsconfig.vitest.json @@ -0,0 +1,4 @@ +{ + "extends": ["./tsconfig.json"], + "exclude": ["./playground"] +} diff --git a/vitest.config.ts b/vitest.config.ts index c7d146f..a93210a 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -3,8 +3,5 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { includeSource: ['src/**/*.{js,ts}'], - // typecheck: { - // ignoreSourceErrors: true, - // }, }, }) diff --git a/vitest.type.config.ts b/vitest.type.config.ts new file mode 100644 index 0000000..784fee5 --- /dev/null +++ b/vitest.type.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vitest/config' +import config from './vitest.config.ts' + +export default defineConfig({ + ...config, + test: { + ...config.test, + typecheck: { + tsconfig: './tsconfig.vitest.json', + }, + }, +})