# test.social/core/reporters/card.reporter.test.ts

> 21 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-social-core-reporters-card-reporter-test-ts
Source text: https://banes-lab.com/source/testing/test.social/core/reporters/card.reporter.test.ts.txt

Listed in [test.social/core/reporters](https://banes-lab.com/api/source/testing/test.social/core/reporters.md).

## Contained in

- [test.social/core/reporters](https://banes-lab.com/anatomy/testing/folder-testing-test-social-core-reporters.md)

## Source

```typescript
import { afterEach, describe, expect, it, vi } from "vitest";
import { conclude, say } from "@banes-lab/social-share/core/reporters/card.reporter.ts";
import process from "node:process";

describe("say and conclude", () => {
    afterEach(() => {
        vi.restoreAllMocks();
        process.exitCode = 0;
    });

    it("prints the clean line and passes when nothing was found", () => {
        const out = vi.spyOn(process.stdout, "write").mockReturnValue(true);
        say("hello");
        expect(conclude([], "clean")).toBe(true);
        expect(out.mock.calls.map(([text]) => text)).toStrictEqual(["hello\n", "clean\n"]);
    });

    it("prints every finding and fails the process", () => {
        const errors = vi.spyOn(process.stderr, "write").mockReturnValue(true);
        expect(conclude([{ card: "demo", message: "is broken." }], "clean")).toBe(false);
        expect(errors.mock.calls[0]?.[0]).toBe("  demo is broken.\n");
        expect(process.exitCode).toBe(1);
    });
});
```
