From 614b9b7ef4f9c741b4163b79372ec937f72788c3 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Tue, 23 Jan 2024 17:01:06 -0500 Subject: [PATCH 1/4] add new context test --- src/__tests__/context.test.js | 14 ++++++++++++++ src/__tests__/fixtures/Context.svelte | 7 +++++++ 2 files changed, 21 insertions(+) create mode 100644 src/__tests__/context.test.js create mode 100644 src/__tests__/fixtures/Context.svelte diff --git a/src/__tests__/context.test.js b/src/__tests__/context.test.js new file mode 100644 index 0000000..effdef4 --- /dev/null +++ b/src/__tests__/context.test.js @@ -0,0 +1,14 @@ +import { expect, test } from 'vitest' + +import { render } from '..' +import Comp from './fixtures/Context.svelte' + +test('can set a context', () => { + const message = 'Got it' + + const { getByText } = render(Comp, { + context: new Map(Object.entries({ foo: { message } })), + }) + + expect(getByText(message)).toBeTruthy() +}) diff --git a/src/__tests__/fixtures/Context.svelte b/src/__tests__/fixtures/Context.svelte new file mode 100644 index 0000000..be8253b --- /dev/null +++ b/src/__tests__/fixtures/Context.svelte @@ -0,0 +1,7 @@ + + +
{ctx.message}
From f5121e169f4b1bafe39c4193270cdc862b532519 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Wed, 24 Jan 2024 09:58:25 -0500 Subject: [PATCH 2/4] chore: simplify implementation of act --- src/pure.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/pure.js b/src/pure.js index 04d3cb0..6d49434 100644 --- a/src/pure.js +++ b/src/pure.js @@ -109,10 +109,9 @@ const cleanup = () => { Array.from(containerCache.keys()).forEach(cleanupAtContainer) } -const act = (fn) => { - const value = fn && fn() - if (value !== undefined && typeof value.then === 'function') { - return value.then(() => tick()) +const act = async (fn) => { + if (fn) { + await fn() } return tick() } From 16a7a4b187db59cbdabcff1ce686b40dc01c6524 Mon Sep 17 00:00:00 2001 From: Michael Cousins Date: Sat, 27 Jan 2024 07:15:08 +1000 Subject: [PATCH 3/4] chore: fix linting, formatting, and git hooks configs (#291) --- .eslintrc.cjs | 29 +++++++++++++++++++++++++---- .husky/commit-msg | 4 ++++ .husky/pre-commit | 4 ++++ .prettierrc.yaml | 7 +++++++ package.json | 36 +++++++++++++++++++----------------- types/index.d.ts | 5 ++--- vite.config.js | 2 +- 7 files changed, 62 insertions(+), 25 deletions(-) create mode 100755 .husky/commit-msg create mode 100755 .husky/pre-commit diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 97b6929..0bd04ba 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -3,19 +3,40 @@ module.exports = { env: { browser: true, es6: true, - 'vitest-globals/env': true + 'vitest-globals/env': true, }, - extends: ['standard', 'plugin:vitest-globals/recommended'], + extends: [ + 'standard', + 'plugin:vitest-globals/recommended', + 'plugin:svelte/recommended', + 'prettier', + ], plugins: ['svelte', 'simple-import-sort'], rules: { - 'max-len': ['warn', { code: 100 }], 'simple-import-sort/imports': 'error', - 'no-multiple-empty-lines': ['error', { max: 2, maxBOF: 2, maxEOF: 0 }], }, overrides: [ + { + files: ['*.ts'], + parser: '@typescript-eslint/parser', + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/stylistic', + 'prettier', + ], + rules: { + '@typescript-eslint/ban-types': [ + 'error', + { types: { '{}': false }, extendDefaults: true }, + ], + '@typescript-eslint/no-explicit-any': 'off', + 'import/export': 'off', + }, + }, ], parserOptions: { ecmaVersion: 2022, sourceType: 'module', }, + ignorePatterns: ['!/.*'], } diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100755 index 0000000..1a089f4 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx --no-install commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..cf0c46b --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npx --no-install lint-staged diff --git a/.prettierrc.yaml b/.prettierrc.yaml index 1d2127c..e1bf864 100644 --- a/.prettierrc.yaml +++ b/.prettierrc.yaml @@ -1,2 +1,9 @@ semi: false singleQuote: true +trailingComma: es5 +plugins: + - prettier-plugin-svelte +overrides: + - files: "*.svelte" + options: + parser: svelte diff --git a/package.json b/package.json index c1cdb30..b842ef7 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,8 @@ ], "scripts": { "toc": "doctoc README.md", - "lint": "eslint src --fix", + "lint": "(prettier . --check || true) && eslint .", + "format": "prettier . --write && eslint . --fix", "test": "vitest run src", "test:watch": "npm run test -- --watch", "test:update": "npm run test -- --updateSnapshot --coverage", @@ -61,10 +62,13 @@ "@commitlint/config-conventional": "^17.6.6", "@sveltejs/vite-plugin-svelte": "^2.4.2", "@testing-library/jest-dom": "^5.16.5", + "@typescript-eslint/eslint-plugin": "^6.19.1", + "@typescript-eslint/parser": "^6.19.1", "@vitest/coverage-c8": "^0.33.0", "all-contributors-cli": "^6.26.0", "doctoc": "^2.2.1", "eslint": "^8.43.0", + "eslint-config-prettier": "^9.1.0", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.27.5", "eslint-plugin-n": "^16.0.1", @@ -77,30 +81,28 @@ "lint-staged": "^13.2.3", "npm-run-all": "^4.1.5", "prettier": "^3.0.0", + "prettier-plugin-svelte": "^3.1.2", "svelte": "^4.0.1", + "svelte-jester": "^3.0.0", + "typescript": "^5.3.3", "vite": "^4.3.9", "vitest": "^0.33.0" }, - "husky": { - "hooks": { - "pre-commit": "lint-staged", - "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" - } - }, "lint-staged": { - "README.md": [ + "{README.md,.all-contributorsrc}": [ "npm run toc", - "prettier --parser markdown --write", - "git add" - ], - ".all-contributorsrc": [ "npm run contributors:generate", - "git add" + "npx --no-install prettier --write README.md .all-contributorsrc", + "git add README.md .all-contributorsrc" + ], + "src/**/*": [ + "npx --no-install vitest related --run" + ], + "*.{js,cjs,ts,svelte,json,yml,yaml}": [ + "npx --no-install prettier --check" ], - "**/*.js": [ - "npm run lint", - "npm test", - "git add" + "*.{js,cjs,ts,svelte}": [ + "npx --no-install eslint" ] }, "commitlint": { diff --git a/types/index.d.ts b/types/index.d.ts index c1de78a..26d85d7 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -2,9 +2,8 @@ // Project: https://github.com/testing-library/svelte-testing-library // Definitions by: Rahim Alwer -import {queries, Queries, BoundFunction, EventType} from '@testing-library/dom' - -import { SvelteComponent, ComponentProps, ComponentConstructorOptions } from 'svelte' +import {BoundFunction, EventType,Queries, queries} from '@testing-library/dom' +import { ComponentConstructorOptions,ComponentProps, SvelteComponent } from 'svelte' export * from '@testing-library/dom' diff --git a/vite.config.js b/vite.config.js index 65a1618..a32b963 100644 --- a/vite.config.js +++ b/vite.config.js @@ -1,5 +1,5 @@ -import { defineConfig } from 'vite' import { svelte } from '@sveltejs/vite-plugin-svelte' +import { defineConfig } from 'vite' // https://vitejs.dev/config/ export default defineConfig({ From ee1b1f791792bfc2a1598867a076bc516c180524 Mon Sep 17 00:00:00 2001 From: Michael Cousins Date: Sun, 28 Jan 2024 07:11:41 +1100 Subject: [PATCH 4/4] feat(vitest): add vitest cleanup export (#294) feat(vitest): add vitest cleanup import --- package.json | 13 ++++++++----- src/__tests__/_vitest-setup.js | 2 ++ src/test-setup.js | 11 ----------- src/vitest.js | 8 ++++++++ vite.config.js | 12 ++++++++---- 5 files changed, 26 insertions(+), 20 deletions(-) create mode 100644 src/__tests__/_vitest-setup.js delete mode 100644 src/test-setup.js create mode 100644 src/vitest.js diff --git a/package.json b/package.json index b842ef7..afe5e54 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,9 @@ ".": { "types": "./types/index.d.ts", "default": "./src/index.js" + }, + "./vitest": { + "default": "./src/vitest.js" } }, "type": "module", @@ -43,9 +46,9 @@ "toc": "doctoc README.md", "lint": "(prettier . --check || true) && eslint .", "format": "prettier . --write && eslint . --fix", - "test": "vitest run src", - "test:watch": "npm run test -- --watch", - "test:update": "npm run test -- --updateSnapshot --coverage", + "test": "vitest run --coverage", + "test:watch": "vitest", + "test:update": "vitest run --update", "setup": "npm install && npm run validate", "validate": "npm-run-all lint test", "contributors:add": "all-contributors add", @@ -61,10 +64,10 @@ "@commitlint/cli": "^17.6.6", "@commitlint/config-conventional": "^17.6.6", "@sveltejs/vite-plugin-svelte": "^2.4.2", - "@testing-library/jest-dom": "^5.16.5", + "@testing-library/jest-dom": "^6.3.0", "@typescript-eslint/eslint-plugin": "^6.19.1", "@typescript-eslint/parser": "^6.19.1", - "@vitest/coverage-c8": "^0.33.0", + "@vitest/coverage-v8": "^0.33.0", "all-contributors-cli": "^6.26.0", "doctoc": "^2.2.1", "eslint": "^8.43.0", diff --git a/src/__tests__/_vitest-setup.js b/src/__tests__/_vitest-setup.js new file mode 100644 index 0000000..13ed819 --- /dev/null +++ b/src/__tests__/_vitest-setup.js @@ -0,0 +1,2 @@ +import '@testing-library/jest-dom/vitest' +import '../vitest' diff --git a/src/test-setup.js b/src/test-setup.js deleted file mode 100644 index fe15b57..0000000 --- a/src/test-setup.js +++ /dev/null @@ -1,11 +0,0 @@ -import * as matchers from '@testing-library/jest-dom/dist/matchers' -import { afterEach, expect } from 'vitest' - -import { act, cleanup } from './pure.js' - -expect.extend(matchers) - -afterEach(async () => { - await act() - cleanup() -}) diff --git a/src/vitest.js b/src/vitest.js new file mode 100644 index 0000000..135ddbe --- /dev/null +++ b/src/vitest.js @@ -0,0 +1,8 @@ +import { afterEach } from 'vitest' + +import { act, cleanup } from './pure.js' + +afterEach(async () => { + await act() + cleanup() +}) diff --git a/vite.config.js b/vite.config.js index a32b963..f261029 100644 --- a/vite.config.js +++ b/vite.config.js @@ -3,9 +3,13 @@ import { defineConfig } from 'vite' // https://vitejs.dev/config/ export default defineConfig({ - plugins: [svelte()], - test: { - environment: 'jsdom', - setupFiles: ['./src/test-setup.js'], + plugins: [svelte()], + test: { + environment: 'jsdom', + setupFiles: ['./src/__tests__/_vitest-setup.js'], + coverage: { + provider: 'v8', + include: ['src'], }, + }, })