Skip to content

[Feature]: Provide the ability to cut-off files from "finding more tests" #15642

Open
@philbarresi

Description

@philbarresi

🚀 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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions