test: add

This commit is contained in:
Michael Naumov 2026-05-14 22:44:31 -06:00
parent 3c25891993
commit b7c2fd6faa
12 changed files with 179 additions and 1 deletions

11
scripts/test-coverage.ts Normal file
View file

@ -0,0 +1,11 @@
import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
import { testCoverage } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
const FULL_COVERAGE_PERCENT = 100;
await wrapCliTask(() =>
testCoverage({
minCoverageInPercents: FULL_COVERAGE_PERCENT,
projects: ['unit-tests']
})
);

View file

@ -0,0 +1,8 @@
import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
import { test } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
await wrapCliTask(() =>
test({
projects: ['integration-tests:android']
})
);

View file

@ -0,0 +1,8 @@
import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
import { test } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
await wrapCliTask(() =>
test({
projects: ['integration-tests:desktop']
})
);

View file

@ -0,0 +1,8 @@
import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
import { test } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
await wrapCliTask(() =>
test({
projects: ['integration-tests:no-app']
})
);

View file

@ -0,0 +1,14 @@
import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
import { test } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
await wrapCliTask(async () => {
await test({
projects: ['integration-tests:no-app']
});
await test({
projects: ['integration-tests:android']
});
await test({
projects: ['integration-tests:desktop']
});
});

8
scripts/test-watch.ts Normal file
View file

@ -0,0 +1,8 @@
import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
import { testWatch } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
await wrapCliTask(() =>
testWatch({
projects: ['unit-tests']
})
);

8
scripts/test.ts Normal file
View file

@ -0,0 +1,8 @@
import { wrapCliTask } from 'obsidian-dev-utils/script-utils/cli-utils';
import { test } from 'obsidian-dev-utils/script-utils/test-runners/vitest';
await wrapCliTask(() =>
test({
projects: ['unit-tests']
})
);

83
scripts/vitest-config.ts Normal file
View file

@ -0,0 +1,83 @@
import { defineConfig } from 'vitest/config';
const SHARED_EXCLUDE = ['node_modules', 'dist'];
const BIG_TIMEOUT_IN_MILLISECONDS = 30_000;
const ANDROID_TIMEOUT_IN_MILLISECONDS = 60_000;
const HOOK_TIMEOUT_MULTIPLIER = 4;
export const config = defineConfig({
test: {
coverage: {
exclude: [
'src/**/*.test.ts'
],
include: ['src/**/*.ts'],
provider: 'v8',
reporter: ['text', 'lcov', 'html'],
reportsDirectory: './coverage'
},
exclude: ['node_modules', 'dist'],
globals: false,
include: ['src/**/*.test.ts'],
passWithNoTests: true,
projects: [
{
resolve: {
alias: {
obsidian: 'obsidian-test-mocks/obsidian'
}
},
ssr: {
noExternal: ['obsidian-dev-utils', 'obsidian-typings']
},
test: {
environment: 'jsdom',
exclude: [...SHARED_EXCLUDE, 'src/**/*.integration.test.ts'],
execArgv: ['--no-webstorage'],
include: ['src/**/*.test.ts'],
name: 'unit-tests',
setupFiles: ['obsidian-test-mocks/vitest-setup']
}
},
{
test: {
environment: 'node',
fileParallelism: false,
hookTimeout: BIG_TIMEOUT_IN_MILLISECONDS * HOOK_TIMEOUT_MULTIPLIER,
include: ['src/**/*.no-app.integration.test.ts'],
name: 'integration-tests:no-app',
testTimeout: BIG_TIMEOUT_IN_MILLISECONDS
}
},
{
test: {
environment: 'node',
fileParallelism: false,
globalSetup: ['obsidian-integration-testing/vitest-global-setup'],
hookTimeout: BIG_TIMEOUT_IN_MILLISECONDS * HOOK_TIMEOUT_MULTIPLIER,
include: ['src/**/*.desktop.integration.test.ts'],
name: 'integration-tests:desktop',
testTimeout: BIG_TIMEOUT_IN_MILLISECONDS
}
},
{
test: {
environment: 'node',
environmentOptions: {
obsidianTransport: {
appiumUrl: 'http://localhost:4723',
avdName: 'obsidian_test',
type: 'obsidian-android-appium'
}
},
fileParallelism: false,
globalSetup: ['obsidian-integration-testing/vitest-global-setup'],
hookTimeout: ANDROID_TIMEOUT_IN_MILLISECONDS * HOOK_TIMEOUT_MULTIPLIER,
include: ['src/**/*.android.integration.test.ts'],
name: 'integration-tests:android',
testTimeout: ANDROID_TIMEOUT_IN_MILLISECONDS
}
}
]
}
});

View file

@ -0,0 +1,13 @@
import { getTempVault } from 'obsidian-integration-testing/vitest-global-setup';
import {
describe,
expect,
it
} from 'vitest';
describe('Smoke test', () => {
it('should load plugin on Android', () => {
const vault = getTempVault();
expect(vault.path).toBeTruthy();
});
});

View file

@ -0,0 +1,13 @@
import { getTempVault } from 'obsidian-integration-testing/vitest-global-setup';
import {
describe,
expect,
it
} from 'vitest';
describe('Smoke test', () => {
it('should load plugin on Desktop', () => {
const vault = getTempVault();
expect(vault.path).toBeTruthy();
});
});

View file

@ -32,6 +32,7 @@
"./commitlint.config.ts",
"./eslint.config.mts",
"./src/**/*.ts",
"./scripts/**/*.ts"
"./scripts/**/*.ts",
"./vitest.config.ts"
]
}

3
vitest.config.ts Normal file
View file

@ -0,0 +1,3 @@
import { config } from './scripts/vitest-config.ts';
export default config;