> ## Documentation Index
> Fetch the complete documentation index at: https://docs.baserun.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# jest integration

Baserun offers a [jest](https://jestjs.io/docs/getting-started) preset, which will automatically add the `beforeAll` to your
test file and turn all `it` and `test` calls into `baserun.trace` calls.

## Setup

```bash theme={null}
npm install baserun
# or
yarn add baserun
```

There is no particular change needed in your actual tests, just add the `--preset baserun` flag to your jest command.

```typescript test_module.spec.ts theme={null}
import { baserun } from "baserun";

describe("My Test Suite", () => {
  // ... the tests
});
```

```bash theme={null}
npm run jest --preset baserun test_module.spec.ts
```

## Running multiple tests

It's often helpful to exercise the same test over multiple examples. To do this, we suggest doing a simple for loop to autogenerate your tests and for larger numbers of examples you can read from a file or other data structure.

```typescript my-test.test.ts theme={null}
import { baserun } from "baserun";

const examples = [
  { place: "Paris", expected: "Eiffel Tower" },
  { place: "Rome", expected: "Colosseum" },
];

describe("Baserun end-to-end", () => {
  beforeAll(async () => {
    // the only thing needed to make baserun work
    await baserun.init();
  });

  for (const { place, expected } of examples) {
    it(`should suggest the ${expected}`, async () => {
      const chatCompletion = await openai.chat.completions.create({
        model: "gpt-3.5-turbo",
        temperature: 0.7,
        messages: [
          {
            role: "user",
            content: `What are three activities to do in ${place}?`,
          },
        ],
      });

      expect(chatCompletion.choices[0].message!.content!).toContain(expected);
    });
  }
});
```

## Existing presets

If you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config

```js theme={null}
// jest.config.js or jest.config.baserun.js

const tsPreset = require("ts-jest/jest-preset");
const baserunPreset = require("baserun/jest-preset");

module.exports = {
  ...tsPreset,
  ...baserunPreset,
  testTimeout: 10000,
};
```

## Naming

Baserun lets you compare test results and debug each step side by side. We consider the full path of the describe and it names of the jest test as a unique identifier for the test. In the example above, two tests would be run and identified by `("Baserun end-to-end", "should suggest the Eiffel Tower")` and `("Baserun end-to-end", "should suggest the Colosseum")`

<CardGroup cols={2}>
  <Card title="Automatic evaluations" icon="scale-balanced" href="/evaluation/automatic-evaluation">
    Evaluate tests' outputs.
  </Card>
</CardGroup>
