TestPrune.Falco
2.0.3
dotnet add package TestPrune.Falco --version 2.0.3
NuGet\Install-Package TestPrune.Falco -Version 2.0.3
<PackageReference Include="TestPrune.Falco" Version="2.0.3" />
<PackageVersion Include="TestPrune.Falco" Version="2.0.3" />
<PackageReference Include="TestPrune.Falco" />
paket add TestPrune.Falco --version 2.0.3
#r "nuget: TestPrune.Falco, 2.0.3"
#:package TestPrune.Falco@2.0.3
#addin nuget:?package=TestPrune.Falco&version=2.0.3
#tool nuget:?package=TestPrune.Falco&version=2.0.3
TestPrune.Falco
When you change a route handler, only re-run the integration tests that hit that route.
This is an extension for TestPrune
that connects Falco URL routes to integration tests. If you change the
handler for /api/users/{id}, it finds the tests that make requests to
that URL and runs just those.
Status: early alpha. This is a young project, substantially AI-written, and still finding its shape. Behavior and APIs shift between versions, so pin a version and expect surprises.
Installation
dotnet add package TestPrune.Falco
How to use it
1. Store your route mappings during indexing
Tell TestPrune which source files handle which URLs. Each entry is a
RouteHandlerEntry; db.RebuildRouteHandlers clears and rewrites the
whole route table:
open TestPrune.AstAnalyzer // RouteHandlerEntry
db.RebuildRouteHandlers [
{ UrlPattern = "/api/users/{id}"
HttpMethod = "GET"
HandlerSourceFile = "src/Web/Handlers/Users.fs" }
{ UrlPattern = "/api/users/{id}"
HttpMethod = "PUT"
HandlerSourceFile = "src/Web/Handlers/Users.fs" }
]
2. Create the extension and query affected tests
The extension reads routes through a RouteStore — build one from your
Database with toRouteStore:
open TestPrune.Ports // toRouteStore, toSymbolStore
open TestPrune.Extensions // ITestPruneExtension, AffectedTest
let extension =
FalcoRouteExtension(
integrationTestProject = "MyApp.IntegrationTests",
integrationTestDir = "tests/MyApp.IntegrationTests",
routeStore = toRouteStore db
)
// Affected test classes, directly:
let affected = extension.FindAffectedTestClasses(changedFiles, repoRoot)
// -> [{ TestProject = "MyApp.IntegrationTests"; TestClass = "UsersTests" }]
To feed those couplings into TestPrune's dependency graph instead, use
the ITestPruneExtension interface, which returns edges to inject:
let edges =
(extension :> ITestPruneExtension)
.AnalyzeEdges (toSymbolStore db) changedFiles repoRoot
// -> Dependency list (test symbol -> handler symbol, kind SharedState)
How it works
- Checks if any changed file is a known handler (from the route table)
- Looks up which URL patterns that handler serves
- Scans your integration test
.fsfiles for those URLs (/api/users/{id}matches/api/users/123in your test code) - Returns the test classes from files that reference affected routes
(
FindAffectedTestClasses), or those couplings as graph edges (AnalyzeEdges)
Documentation
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- FSharp.Compiler.Service (>= 43.12.204)
- Microsoft.Data.Sqlite (>= 10.0.9)
- SQLitePCLRaw.lib.e_sqlite3 (>= 3.50.3)
- TestPrune.Core (>= 4.3.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.0.3 | 96 | 6/25/2026 |
| 2.0.2 | 111 | 6/12/2026 |
| 2.0.1 | 122 | 4/20/2026 |
| 2.0.0 | 98 | 4/20/2026 |
| 1.0.2 | 108 | 4/11/2026 |
| 1.0.1 | 124 | 4/7/2026 |
| 0.1.0-beta.1 | 100 | 4/2/2026 |
| 0.1.0-alpha.9 | 68 | 4/2/2026 |
| 0.1.0-alpha.8 | 67 | 4/1/2026 |
| 0.1.0-alpha.7 | 68 | 3/31/2026 |
| 0.1.0-alpha.6 | 58 | 3/30/2026 |
| 0.1.0-alpha.5 | 69 | 3/27/2026 |
| 0.1.0-alpha.4 | 70 | 3/27/2026 |
| 0.1.0-alpha.3 | 61 | 3/26/2026 |
| 0.1.0-alpha.2 | 54 | 3/23/2026 |