Description
🚀 Feature Proposal
Given a codebase with a general setup such as this:
route/blog/utils/loggingMiddleware.ts
route/blog/utils/__tests__/loggingMiddleware.test.ts
route/blog/list.ts
route/blog/create.ts
route/blog/get.ts
route/blog/delete.ts
route/blog/router.ts
route/blog/__tests__/list.test.ts
route/blog/__tests__/create.test.ts
route/blog/__tests__/get.test.ts
route/blog/__tests__/delete.test.ts
route/pages/utils/somePageUtil.ts
route/pages/list.ts
route/pages/create.ts
route/pages/get.ts
route/pages/delete.ts
route/pages/router.ts
route/pages/__tests__/list.test.ts
route/pages/__tests__/create.test.ts
route/pages/__tests__/get.test.ts
route/pages/__tests__/delete.test.ts
route/index.ts
Where route/blog/router.ts
looks like:
import { loggingMiddleware } from "./utils/loggingMiddleware.ts";
import { router} from "whatever-lib";
import { handleList } from "./list";
import { handleCreate } from "./create";
import { handleGet } from "./get";
import { handleDelete } from "./get";
export const blogRouter = router();
router.use(someLoggingUtil);
blogRouter.get("/", handleList);
blogRouter.get("/:id", handleGet);
blogRouter.post("/", handleCreate);
blogRouter.delete("/:id", handleDelete);
Same withroute/pages/router
.
And route/index.ts
looks like this:
import { router} from "whatever-lib";
import { blogRouter } from "./blog/router.ts";
import { pagesRouter } from "./pages/router.ts";
const mainRouter = router();
router.all("/blog", blogRouter);
router.all("/pages", pagesRouter);
When you change route/blog/utils/loggingMiddleware.ts
, you end up firing any test listed above. Firstly, because loggingMiddleware.test.ts
directly corresponds to loggingMiddleware.ts
, but then the others fire due to how the dependencies appear to be picked up along the way.
Can we have some mechanism in that helps changes to loggingMiddleware.ts
not trigger effectively a whole re-test?
Motivation
Even when using --changedSince
, we see that a large majority of our tests are often running due to writing large applications with many imports. We believe that being able to short-circuit a pathway for tests would greatly reduce the number of tests run.
Example
No response
Pitch
We believe that we can speed up many CI environments by orders of magnitude with this feature, when combined with usage of --changedSince
, and that the only place it can be handled is in the core platform.