Composition-root arm of TestAppOptions: the test starts from the
application the project actually ships and subtracts from it.
This is the arm that makes a test app compose like a real one. Everything the root registered — middleware, error handling, health indicators, route ordering — is present, so a test observes the composition production has rather than a second one assembled by hand.
An already-constructed, not yet started application — typically the
createApp() a scaffolded project exports from setu.config.ts, or a
starter factory's return value.
createTestApp applies without, then overrides, then starts it.
without: readonly string[]
Plugin names to drop before start(), so their register() never runs
and any eager side effect inside it never happens.
Throws naming the entry if the application holds no plugin with that name:
a silently ignored without: ['databse'] would run the whole test against
the real plugin while reporting success. Repeated entries are de-duplicated,
so listing a name twice is not that error.
overrides: readonly IPlugin[]
Plugins to append after without is applied — usually
overrideCapability results, though any IPlugin is accepted.
This exists because the default autoStart: true leaves no window between
construction and start() in which a caller could register them.
autoStart: boolean
Whether to auto-start the application.
plugins: never
Not available on this arm — supply plugins or app, never both.