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 查看