# test.govlab/patterns/core/counters/dependency.counter.test.ts

> 25 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-govlab-patterns-core-counters-dependency-counter-test-ts
Source text: https://banes-lab.com/source/testing/test.govlab/patterns/core/counters/dependency.counter.test.ts.txt

Listed in [test.govlab/patterns/core/counters](https://banes-lab.com/api/source/testing/test.govlab/patterns/core/counters.md), after [test.govlab/patterns/core/counters/base.counter.test.ts](https://banes-lab.com/source/testing/test.govlab/patterns/core/counters/base.counter.test.ts.md) and before [test.govlab/patterns/core/counters/report.counter.test.ts](https://banes-lab.com/source/testing/test.govlab/patterns/core/counters/report.counter.test.ts.md).

## Contained in

- [test.govlab/patterns/core/counters](https://banes-lab.com/anatomy/testing/folder-testing-test-govlab-patterns-core-counters.md)

## Source

```typescript
import { describe, expect, it } from "vitest";
import type { ModuleUnit } from "@govlab/patterns/types/code.types.ts";
import { crossModuleFanIn } from "@govlab/patterns/core/counters/dependency.counter.ts";
import { keyOf } from "@govlab/patterns/core/formatters/definition.formatter.ts";

describe("crossModuleFanIn", () => {
    it("counts distinct importing modules by import source", () => {
        const importers = ["/b", "/d"];
        const units: ModuleUnit[] = [
            ...importers.map((moduleDir) => ({
                imports: [{ importedNames: ["parse"], source: "@scope/a" }],
                moduleDir,
            })),
            { imports: [], moduleDir: "/a" },
        ];
        const fanIn = crossModuleFanIn(units, new Map([["@scope/a", "/a"]]));
        expect(fanIn.get(keyOf("/a", "parse"))).toBe(importers.length);
    });

    it("ignores unresolved sources and self-imports", () => {
        const units: ModuleUnit[] = [
            { imports: [{ importedNames: ["x"], source: "./local.ts" }], moduleDir: "/a" },
            { imports: [{ importedNames: ["x"], source: "@scope/a" }], moduleDir: "/a" },
        ];
        expect(crossModuleFanIn(units, new Map([["@scope/a", "/a"]])).size).toBe(0);
    });
});
```
