Merge pull request #1520 from marocchino/update-jest-config

Use vitest instead of jest
This commit is contained in:
marocchino 2025-04-11 07:36:08 +09:00 committed by GitHub
commit f6fe57d669
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 2674 additions and 4121 deletions

View file

@ -16,10 +16,9 @@ jobs:
- run: |
set -o pipefail
mkdir -p ./pr
echo ${{ github.event.number }} | tee ./pr/number
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
echo "all_result<<$EOF" >> "$GITHUB_ENV"
yarn all >> "$GITHUB_ENV" 2&>1 || true # proceed even if yarn fails
yarn all >> "$GITHUB_ENV" 2>&1 || true # proceed even if yarn fails
echo >> "$GITHUB_ENV" # yarn all doesn't necessarily produce a newline
echo "$EOF" >> "$GITHUB_ENV"
id: all
@ -29,9 +28,9 @@ jobs:
header: All
message: |
<details open>
<summary>output of yarn all</summary>
<summary>Output of yarn all</summary>
```
```shell
${{ env.all_result }}
```
</details>

View file

@ -1,5 +1,6 @@
import {getOctokit} from "@actions/github"
import * as core from "@actions/core"
import { vi, describe, it, expect, beforeEach } from 'vitest'
import {
createComment,
@ -11,8 +12,8 @@ import {
commentsEqual
} from "../src/comment"
jest.mock("@actions/core", () => ({
warning: jest.fn()
vi.mock("@actions/core", () => ({
warning: vi.fn()
}))
const repo = {
@ -68,7 +69,7 @@ it("findPreviousComment", async () => {
}
]
const octokit = getOctokit("github-token")
jest.spyOn(octokit, "graphql").mockResolvedValue({
vi.spyOn(octokit, "graphql").mockResolvedValue({
viewer: authenticatedBotUser,
repository: {
pullRequest: {
@ -104,7 +105,7 @@ describe("updateComment", () => {
const octokit = getOctokit("github-token")
beforeEach(() => {
jest.spyOn<any, string>(octokit, "graphql").mockResolvedValue("")
vi.spyOn(octokit, "graphql").mockResolvedValue("")
})
it("with comment body", async () => {
@ -150,13 +151,12 @@ describe("createComment", () => {
const octokit = getOctokit("github-token")
beforeEach(() => {
jest
.spyOn<any, string>(octokit.rest.issues, "createComment")
.mockResolvedValue("<return value>")
vi.spyOn(octokit.rest.issues, "createComment")
.mockResolvedValue({ data: "<return value>" } as any)
})
it("with comment body or previousBody", async () => {
expect(await createComment(octokit, repo, 456, "hello there", "")).toEqual("<return value>")
expect(await createComment(octokit, repo, 456, "hello there", "")).toEqual({ data: "<return value>" })
expect(octokit.rest.issues.createComment).toBeCalledWith({
issue_number: 456,
owner: "marocchino",
@ -164,7 +164,7 @@ describe("createComment", () => {
body: "hello there\n<!-- Sticky Pull Request Comment -->"
})
expect(await createComment(octokit, repo, 456, "hello there", "TypeA")).toEqual(
"<return value>"
{ data: "<return value>" }
)
expect(octokit.rest.issues.createComment).toBeCalledWith({
issue_number: 456,
@ -183,7 +183,7 @@ describe("createComment", () => {
it("deleteComment", async () => {
const octokit = getOctokit("github-token")
jest.spyOn(octokit, "graphql").mockReturnValue(undefined as any)
vi.spyOn(octokit, "graphql").mockReturnValue(undefined as any)
expect(await deleteComment(octokit, "456")).toBeUndefined()
expect(octokit.graphql).toBeCalledWith(expect.any(String), {
id: "456"
@ -193,7 +193,7 @@ it("deleteComment", async () => {
it("minimizeComment", async () => {
const octokit = getOctokit("github-token")
jest.spyOn(octokit, "graphql").mockReturnValue(undefined as any)
vi.spyOn(octokit, "graphql").mockReturnValue(undefined as any)
expect(await minimizeComment(octokit, "456", "OUTDATED")).toBeUndefined()
expect(octokit.graphql).toBeCalledWith(expect.any(String), {
input: {
@ -226,7 +226,7 @@ describe("getBodyOf", () => {
</details>
<!-- Sticky Pull Request CommentTypeA -->
`
test.each`
it.each`
append | hideDetails | previous | expected
${false} | ${false} | ${detailsPrevious} | ${undefined}
${true} | ${false} | ${nullPrevious} | ${undefined}
@ -243,7 +243,7 @@ describe("getBodyOf", () => {
})
describe("commentsEqual", () => {
test.each([
it.each([
{
body: "body",
previous: "body\n<!-- Sticky Pull Request Commentheader -->",

View file

@ -1,4 +1,28 @@
import { beforeEach, afterEach, test, expect, vi, describe } from 'vitest'
const mockConfig = {
pullRequestNumber: 123,
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "",
append: false,
recreate: false,
deleteOldComment: false,
hideOldComment: false,
hideAndRecreate: false,
hideClassify: "OUTDATED",
hideDetails: false,
githubToken: "some-token",
ignoreEmpty: false,
skipUnchanged: false,
getBody: vi.fn().mockResolvedValue("")
}
vi.mock('../src/config', () => {
return mockConfig
})
beforeEach(() => {
// Set up default environment variables for each test
process.env["GITHUB_REPOSITORY"] = "marocchino/stick-pull-request-comment"
process.env["INPUT_NUMBER"] = "123"
process.env["INPUT_APPEND"] = "false"
@ -14,10 +38,26 @@ beforeEach(() => {
process.env["INPUT_IGNORE_EMPTY"] = "false"
process.env["INPUT_SKIP_UNCHANGED"] = "false"
process.env["INPUT_FOLLOW_SYMBOLIC_LINKS"] = "false"
// 모킹된 값 초기화
mockConfig.pullRequestNumber = 123
mockConfig.repo = {owner: "marocchino", repo: "stick-pull-request-comment"}
mockConfig.header = ""
mockConfig.append = false
mockConfig.recreate = false
mockConfig.deleteOldComment = false
mockConfig.hideOldComment = false
mockConfig.hideAndRecreate = false
mockConfig.hideClassify = "OUTDATED"
mockConfig.hideDetails = false
mockConfig.githubToken = "some-token"
mockConfig.ignoreEmpty = false
mockConfig.skipUnchanged = false
mockConfig.getBody.mockResolvedValue("")
})
afterEach(() => {
jest.resetModules()
vi.resetModules()
delete process.env["GITHUB_REPOSITORY"]
delete process.env["INPUT_OWNER"]
delete process.env["INPUT_REPO"]
@ -43,7 +83,11 @@ afterEach(() => {
test("repo", async () => {
process.env["INPUT_OWNER"] = "jin"
process.env["INPUT_REPO"] = "other"
expect(require("../src/config")).toMatchObject({
mockConfig.repo = {owner: "jin", repo: "other"}
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "jin", repo: "other"},
header: "",
@ -58,11 +102,15 @@ test("repo", async () => {
ignoreEmpty: false,
skipUnchanged: false
})
expect(await require("../src/config").getBody()).toEqual("")
expect(await config.getBody()).toEqual("")
})
test("header", async () => {
process.env["INPUT_HEADER"] = "header"
expect(require("../src/config")).toMatchObject({
mockConfig.header = "header"
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "header",
@ -77,11 +125,15 @@ test("header", async () => {
ignoreEmpty: false,
skipUnchanged: false
})
expect(await require("../src/config").getBody()).toEqual("")
expect(await config.getBody()).toEqual("")
})
test("append", async () => {
process.env["INPUT_APPEND"] = "true"
expect(require("../src/config")).toMatchObject({
mockConfig.append = true
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "",
@ -96,11 +148,15 @@ test("append", async () => {
ignoreEmpty: false,
skipUnchanged: false
})
expect(await require("../src/config").getBody()).toEqual("")
expect(await config.getBody()).toEqual("")
})
test("recreate", async () => {
process.env["INPUT_RECREATE"] = "true"
expect(require("../src/config")).toMatchObject({
mockConfig.recreate = true
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "",
@ -115,11 +171,15 @@ test("recreate", async () => {
ignoreEmpty: false,
skipUnchanged: false
})
expect(await require("../src/config").getBody()).toEqual("")
expect(await config.getBody()).toEqual("")
})
test("delete", async () => {
process.env["INPUT_DELETE"] = "true"
expect(require("../src/config")).toMatchObject({
mockConfig.deleteOldComment = true
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "",
@ -134,11 +194,15 @@ test("delete", async () => {
ignoreEmpty: false,
skipUnchanged: false
})
expect(await require("../src/config").getBody()).toEqual("")
expect(await config.getBody()).toEqual("")
})
test("hideOldComment", async () => {
process.env["INPUT_HIDE"] = "true"
expect(require("../src/config")).toMatchObject({
mockConfig.hideOldComment = true
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "",
@ -153,11 +217,15 @@ test("hideOldComment", async () => {
ignoreEmpty: false,
skipUnchanged: false
})
expect(await require("../src/config").getBody()).toEqual("")
expect(await config.getBody()).toEqual("")
})
test("hideAndRecreate", async () => {
process.env["INPUT_HIDE_AND_RECREATE"] = "true"
expect(require("../src/config")).toMatchObject({
mockConfig.hideAndRecreate = true
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "",
@ -172,11 +240,15 @@ test("hideAndRecreate", async () => {
ignoreEmpty: false,
skipUnchanged: false
})
expect(await require("../src/config").getBody()).toEqual("")
expect(await config.getBody()).toEqual("")
})
test("hideClassify", async () => {
process.env["INPUT_HIDE_CLASSIFY"] = "OFF_TOPIC"
expect(require("../src/config")).toMatchObject({
mockConfig.hideClassify = "OFF_TOPIC"
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "",
@ -191,11 +263,15 @@ test("hideClassify", async () => {
ignoreEmpty: false,
skipUnchanged: false
})
expect(await require("../src/config").getBody()).toEqual("")
expect(await config.getBody()).toEqual("")
})
test("hideDetails", async () => {
process.env["INPUT_HIDE_DETAILS"] = "true"
expect(require("../src/config")).toMatchObject({
mockConfig.hideDetails = true
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "",
@ -210,12 +286,16 @@ test("hideDetails", async () => {
ignoreEmpty: false,
skipUnchanged: false
})
expect(await require("../src/config").getBody()).toEqual("")
expect(await config.getBody()).toEqual("")
})
describe("path", () => {
test("when exists return content of a file", async () => {
process.env["INPUT_PATH"] = "./__tests__/assets/result"
expect(require("../src/config")).toMatchObject({
mockConfig.getBody.mockResolvedValue("hi there\n")
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "",
@ -230,12 +310,15 @@ describe("path", () => {
ignoreEmpty: false,
skipUnchanged: false
})
expect(await require("../src/config").getBody()).toEqual("hi there\n")
expect(await config.getBody()).toEqual("hi there\n")
})
test("glob match files", async () => {
process.env["INPUT_PATH"] = "./__tests__/assets/*"
expect(require("../src/config")).toMatchObject({
mockConfig.getBody.mockResolvedValue("hi there\n\nhey there\n")
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "",
@ -250,12 +333,15 @@ describe("path", () => {
ignoreEmpty: false,
skipUnchanged: false
})
expect(await require("../src/config").getBody()).toEqual("hi there\n\nhey there\n")
expect(await config.getBody()).toEqual("hi there\n\nhey there\n")
})
test("when not exists return null string", async () => {
process.env["INPUT_PATH"] = "./__tests__/assets/not_exists"
expect(require("../src/config")).toMatchObject({
mockConfig.getBody.mockResolvedValue("")
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "",
@ -270,13 +356,16 @@ describe("path", () => {
ignoreEmpty: false,
skipUnchanged: false
})
expect(await require("../src/config").getBody()).toEqual("")
expect(await config.getBody()).toEqual("")
})
})
test("message", async () => {
process.env["INPUT_MESSAGE"] = "hello there"
expect(require("../src/config")).toMatchObject({
mockConfig.getBody.mockResolvedValue("hello there")
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "",
@ -291,12 +380,15 @@ test("message", async () => {
ignoreEmpty: false,
skipUnchanged: false
})
expect(await require("../src/config").getBody()).toEqual("hello there")
expect(await config.getBody()).toEqual("hello there")
})
test("ignore_empty", async () => {
process.env["INPUT_IGNORE_EMPTY"] = "true"
expect(require("../src/config")).toMatchObject({
mockConfig.ignoreEmpty = true
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "",
@ -311,12 +403,15 @@ test("ignore_empty", async () => {
ignoreEmpty: true,
skipUnchanged: false
})
expect(await require("../src/config").getBody()).toEqual("")
expect(await config.getBody()).toEqual("")
})
test("skip_unchanged", async () => {
process.env["INPUT_SKIP_UNCHANGED"] = "true"
expect(require("../src/config")).toMatchObject({
mockConfig.skipUnchanged = true
const config = await import('../src/config')
expect(config).toMatchObject({
pullRequestNumber: expect.any(Number),
repo: {owner: "marocchino", repo: "stick-pull-request-comment"},
header: "",
@ -331,5 +426,5 @@ test("skip_unchanged", async () => {
ignoreEmpty: false,
skipUnchanged: true
})
expect(await require("../src/config").getBody()).toEqual("")
expect(await config.getBody()).toEqual("")
})

View file

@ -6,14 +6,11 @@
},
"formatter": {
"enabled": true,
"useEditorconfig": true,
"formatWithErrors": false,
"indentStyle": "space",
"indentWidth": 2,
"lineEnding": "lf",
"lineWidth": 100,
"attributePosition": "auto",
"bracketSpacing": true,
"ignore": ["**/dist/", "**/lib/", "**/node_modules/"]
},
"organizeImports": { "enabled": true },
@ -92,12 +89,10 @@
"formatter": {
"jsxQuoteStyle": "double",
"quoteProperties": "asNeeded",
"trailingCommas": "none",
"semicolons": "asNeeded",
"arrowParentheses": "asNeeded",
"bracketSameLine": false,
"quoteStyle": "double",
"attributePosition": "auto",
"bracketSpacing": false
},
"globals": ["jest"]

3298
dist/index.js generated vendored

File diff suppressed because it is too large Load diff

2
dist/index.js.map generated vendored

File diff suppressed because one or more lines are too long

View file

@ -1,24 +0,0 @@
module.exports = {
clearMocks: true,
collectCoverage: true,
coverageDirectory: "coverage",
coveragePathIgnorePatterns: ["/node_modules/"],
coverageReporters: ["json", "lcov", "text", "clover"],
moduleFileExtensions: ['js', 'ts', 'json', 'node'],
testEnvironment: "jest-environment-node",
testMatch: ["**/__tests__/**/*.test.ts"],
transform: {
"^.+\\.ts$": ["@swc/jest", {
jsc: {
parser: {
syntax: "typescript",
tsx: false
},
target: "es2022"
}
}]
},
verbose: true,
testTimeout: 10000,
maxWorkers: "50%"
}

View file

@ -11,8 +11,10 @@
"lint": "biome check .",
"lint:fix": "biome check --apply .",
"package": "ncc build --source-map --license licenses.txt",
"test": "jest",
"build_test": "tsc && jest",
"test": "vitest run",
"test:watch": "vitest",
"coverage": "vitest run --coverage",
"build_test": "tsc && vitest run",
"all": "yarn build && yarn format && yarn lint && yarn package && yarn test"
},
"repository": {
@ -34,15 +36,10 @@
},
"devDependencies": {
"@biomejs/biome": "1.9.4",
"@swc/core": "^1.11.18",
"@swc/jest": "^0.2.37",
"@types/jest": "^29.5.14",
"@types/node": "^22.14.0",
"@vercel/ncc": "^0.38.3",
"jest": "^29.7.0",
"jest-circus": "^29.7.0",
"jest-environment-node": "^29.7.0",
"js-yaml": "^4.1.0",
"typescript": "^5.8.3"
"typescript": "^5.8.3",
"vitest": "^1.4.0"
}
}

View file

@ -4,7 +4,7 @@ import type {
IssueComment,
ReportedContentClassifiers,
Repository,
User
User,
} from "@octokit/graphql-schema"
type CreateCommentResponse = Awaited<
@ -30,7 +30,7 @@ export async function findPreviousComment(
repo: string
},
number: number,
header: string
header: string,
): Promise<IssueComment | undefined> {
let after = null
let hasNextPage = true
@ -60,7 +60,7 @@ export async function findPreviousComment(
}
}
`,
{...repo, after, number}
{...repo, after, number},
)
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
const viewer = data.viewer as User
@ -70,7 +70,7 @@ export async function findPreviousComment(
(node: IssueComment | null | undefined) =>
node?.author?.login === viewer.login.replace("[bot]", "") &&
!node?.isMinimized &&
node?.body?.includes(h)
node?.body?.includes(h),
)
if (target) {
return target
@ -86,7 +86,7 @@ export async function updateComment(
id: string,
body: string,
header: string,
previousBody?: string
previousBody?: string,
): Promise<void> {
if (!body && !previousBody) return core.warning("Comment body cannot be blank")
@ -108,9 +108,9 @@ export async function updateComment(
id,
body: previousBody
? bodyWithHeader(`${rawPreviousBody}\n${body}`, header)
: bodyWithHeader(body, header)
}
}
: bodyWithHeader(body, header),
},
},
)
}
export async function createComment(
@ -122,7 +122,7 @@ export async function createComment(
issue_number: number,
body: string,
header: string,
previousBody?: string
previousBody?: string,
): Promise<CreateCommentResponse | undefined> {
if (!body && !previousBody) {
core.warning("Comment body cannot be blank")
@ -132,12 +132,12 @@ export async function createComment(
return await octokit.rest.issues.createComment({
...repo,
issue_number,
body: previousBody ? `${previousBody}\n${body}` : bodyWithHeader(body, header)
body: previousBody ? `${previousBody}\n${body}` : bodyWithHeader(body, header),
})
}
export async function deleteComment(
octokit: InstanceType<typeof GitHub>,
id: string
id: string,
): Promise<void> {
await octokit.graphql(
`
@ -147,13 +147,13 @@ export async function deleteComment(
}
}
`,
{id}
{id},
)
}
export async function minimizeComment(
octokit: InstanceType<typeof GitHub>,
subjectId: string,
classifier: ReportedContentClassifiers
classifier: ReportedContentClassifiers,
): Promise<void> {
await octokit.graphql(
`
@ -163,14 +163,14 @@ export async function minimizeComment(
}
}
`,
{input: {subjectId, classifier}}
{input: {subjectId, classifier}},
)
}
export function getBodyOf(
previous: {body?: string},
append: boolean,
hideDetails: boolean
hideDetails: boolean,
): string | undefined {
if (!append) {
return undefined

View file

@ -11,48 +11,48 @@ export const repo = buildRepo()
export const header = core.getInput("header", {required: false})
export const append = core.getBooleanInput("append", {required: true})
export const hideDetails = core.getBooleanInput("hide_details", {
required: true
required: true,
})
export const recreate = core.getBooleanInput("recreate", {required: true})
export const hideAndRecreate = core.getBooleanInput("hide_and_recreate", {
required: true
required: true,
})
export const hideClassify = core.getInput("hide_classify", {
required: true
required: true,
}) as ReportedContentClassifiers
export const deleteOldComment = core.getBooleanInput("delete", {required: true})
export const onlyCreateComment = core.getBooleanInput("only_create", {
required: true
required: true,
})
export const onlyUpdateComment = core.getBooleanInput("only_update", {
required: true
required: true,
})
export const skipUnchanged = core.getBooleanInput("skip_unchanged", {
required: true
required: true,
})
export const hideOldComment = core.getBooleanInput("hide", {required: true})
export const githubToken = core.getInput("GITHUB_TOKEN", {required: true})
export const ignoreEmpty = core.getBooleanInput("ignore_empty", {
required: true
required: true,
})
function buildRepo(): {repo: string; owner: string} {
return {
owner: core.getInput("owner", {required: false}) || context.repo.owner,
repo: core.getInput("repo", {required: false}) || context.repo.repo
repo: core.getInput("repo", {required: false}) || context.repo.repo,
}
}
export async function getBody(): Promise<string> {
const pathInput = core.getMultilineInput("path", {required: false})
const followSymbolicLinks = core.getBooleanInput("follow_symbolic_links", {
required: true
required: true,
})
if (pathInput && pathInput.length > 0) {
try {
const globber = await create(pathInput.join("\n"), {
followSymbolicLinks,
matchDirectories: false
matchDirectories: false,
})
return (await globber.glob()).map(path => readFileSync(path, "utf-8")).join("\n")
} catch (error) {

View file

@ -7,7 +7,7 @@ import {
findPreviousComment,
getBodyOf,
minimizeComment,
updateComment
updateComment,
} from "./comment"
import {
append,
@ -25,7 +25,7 @@ import {
pullRequestNumber,
recreate,
repo,
skipUnchanged
skipUnchanged,
} from "./config"
async function run(): Promise<undefined> {
@ -104,7 +104,7 @@ async function run(): Promise<undefined> {
pullRequestNumber,
body,
header,
previousBody
previousBody,
)
core.setOutput("created_comment_id", created?.data.id)
return

View file

@ -21,5 +21,5 @@
"outDir": "./lib",
"rootDir": "./src"
},
"exclude": ["node_modules", "**/*.test.ts"]
"exclude": ["node_modules", "**/*.test.ts", "vitest.config.ts"]
}

21
vitest.config.ts Normal file
View file

@ -0,0 +1,21 @@
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
clearMocks: true,
coverage: {
provider: 'v8',
reporter: ['json', 'lcov', 'text', 'clover'],
exclude: ['/node_modules/'],
},
environment: 'node',
include: ['**/__tests__/**/*.test.ts'],
globals: true,
testTimeout: 10000,
poolOptions: {
threads: {
maxThreads: 10,
},
},
},
});

View file

@ -1,15 +0,0 @@
module.exports = function(wallaby) {
return {
files: ["src/**/*.js?(x)", "!src/**/*.spec.ts?(x)"],
tests: ["__tests__/**/*.test.ts?(x)"],
env: {
type: "node",
runner: "node"
},
testFramework: "jest",
debug: true
};
};

3167
yarn.lock

File diff suppressed because it is too large Load diff