# test.build/core/selectors/base.selector.test.ts

> 29 lines of code and 0 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-build-core-selectors-base-selector-test-ts
Source text: https://banes-lab.com/source/testing/test.build/core/selectors/base.selector.test.ts.txt

Listed in [test.build/core/selectors](https://banes-lab.com/api/source/testing/test.build/core/selectors.md), before [test.build/core/selectors/catalog.selector.test.ts](https://banes-lab.com/source/testing/test.build/core/selectors/catalog.selector.test.ts.md).

## Contained in

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

## Source

```typescript
import { describe, expect, it } from "vitest";
import {
    entriesAt,
    isRecord,
    numberAt,
    recordAt,
    textAt,
} from "@banes-lab/build-scripts/core/selectors/base.selector.ts";

const SOURCE = { count: 3, items: [1, 2], name: "n", nested: { a: 1 } };

describe("isRecord", () => {
    it("accepts an object and refuses null and a primitive", () => {
        expect(isRecord(SOURCE)).toBe(true);
        expect(isRecord(null)).toBe(false);
        expect(isRecord("x")).toBe(false);
    });
});

describe("textAt, numberAt, recordAt and entriesAt", () => {
    it("reads a field of the asked type and answers the empty value for anything else", () => {
        expect(textAt(SOURCE, "name")).toBe("n");
        expect(textAt(SOURCE, "count")).toBeNull();
        expect(numberAt(SOURCE, "count")).toBe(3);
        expect(numberAt(SOURCE, "name")).toBeNull();
        expect(recordAt(SOURCE, "nested")).toStrictEqual({ a: 1 });
        expect(recordAt(SOURCE, "items")).toStrictEqual([1, 2]);
        expect(recordAt(SOURCE, "name")).toBeNull();
        expect(entriesAt(SOURCE, "items")).toStrictEqual([1, 2]);
        expect(entriesAt(SOURCE, "name")).toStrictEqual([]);
    });
});
```
