Skip to main content

write-tests

Write or debug Artemis JUnit and Vitest tests, including failures that differ between local runs and CI.

ソース情報

リポジトリ
ls1intum/Artemis
ソースの最終更新活動
2026年9月25日 16:39
検出された SKILL.md の言語
英語
スター
813
フォーク
395

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

ファイルエクスプローラー
3 ファイル

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
write-tests
description
Write or debug Artemis JUnit and Vitest tests, including failures that differ between local runs and CI.
# Write Artemis tests ## Server tests Server tests need Docker. They run against PostgreSQL through Testcontainers, locally and in CI. ```bash ./gradlew test -x webapp # everything ./gradlew test --tests ExamIntegrationTest -x webapp # one class ./gradlew test --tests ExamIntegrationTest.testGetExamScore # one method ./gradlew test -DincludeTags='ArchitectureTest' -x webapp # architecture only, fast ``` Name tests `*Test.java`. Reuse the module's base class where one exists. Read `reference/server.md` for base class selection, the admin naming rule that forces a different `@ResourceLock`, date comparison, and shared-spy flakiness. **In the admin module, naming a test `*IntegrationTest` forces it onto a batch base class carrying a shared `@ResourceLock`.** A test that mutates global state and needs isolation must be named `*Test` and extend `AbstractSpringIntegrationIndependentTest` instead. Enforced by `src/test/java/de/tum/cit/aet/artemis/admin/architecture/AdminTestArchitectureTest.java`. ## Client tests Vitest, not Jest. Use `vi.spyOn()`, `vi.fn()`, `vi.clearAllMocks()`. ```bash pnpm run vitest # watch pnpm run vitest:run # single run, everything pnpm exec vitest run <path/to/spec.ts> # single file pnpm run vitest:coverage pnpm run test-diff # only specs affected by the diff ``` **`pnpm run vitest:run -- <path>` runs the entire suite.** The path is swallowed. Use `pnpm exec vitest run <path>` for a single file. **Vitest is not the type check CI runs.** CI runs a stricter spec `tsc`: ```bash pnpm run compile:tests ``` It enforces member visibility, which Vitest does not. A spec that reaches a private member as `component.privateThing` passes locally and fails in CI. Use bracket access, `component['privateThing']`, and run `compile:tests` before pushing. **Test a directive with `TestBed.createDirective`, not a throwaway host component.** Keep a host only when the directive is structural or needs a template around it: something around or beside it, content Angular keeps rendering inside it, a static attribute its constructor reads, or an input that takes a `TemplateRef` or a component instance from the same template. Input bindings apply on the first `detectChanges()`. Read `reference/client.md` for the rest: the `createDirective` pattern and its limits, the monaco stub, zoneless test setup, `model()` versus `input()` plus `output()`, and why template errors need a build rather than a test run. ## Both Keep tests deterministic. Mock external services and WebSockets. CI enforces per-module coverage thresholds, so a new class with no test can fail the build even when nothing is broken. For E2E tests, see `skills/e2e-pr-check/SKILL.md`. Do not add a Playwright test for behavior that a unit or integration test can cover.
GitHubで見る