Skip to content

Testing

When you need to test your application's behaviour in response to different values of incoming environment variables...

Set once

Recommended

typescript
import { sendEmail } from '../src/lib/sender'
import { SmtpSettings} from "../src/settings/smtp";

SmtpSettings.overrideForTest({
  host: '192.168.1.94',
  from: 'noreply@example.org',
  port: 1025
})

describe('Sender', () => {
  describe('sendEmail()', () => {
    it('should send an email', async () => {      
      const info = await sendEmail('to@example.com', 'Subject', '<p>Body</p>')
      expect(info).toBeDefined()
    })
  })
})

Alternately

typescript
import { sendEmail } from '../src/lib/sender'

jest.mock('../src/settings', () => ({
  settings: {
    smtp: {
      host: '192.168.1.94',
      from: 'noreply@example.org',
      port: 1025
    }
  }
}))

describe('Sender', () => {

  describe('sendEmail()', () => {
    it('should send an email', async () => {      
      const info = await sendEmail('to@example.com', 'Subject', '<p>Body</p>')
      expect(info).toBeDefined()
    })
  })
})

Set per test

Recommended

typescript
import { showWidgets } from "../src/lib/simple";
import { PaginationSettings} from "../src/settings/pagination";

function ifMaxPageSizeIs(size: number) {
  PaginationSettings.overrideForTest({maxPageSize: size})
}

describe('showWidgets', () => {
  it("throws if page size exceeds limit", () => {
    ifMaxPageSizeIs(19);
    expect(() => showWidgets(20)).toThrow("exceeds the max");
  });

  it("returns results for valid page size", () => {
    ifMaxPageSizeIs(22);
    expect(() => showWidgets(20)).not.toThrow();
  });

  it("uses default maxPageSize when no pageSize is provided", () => {
    ifMaxPageSizeIs(7);

    const shownWidgets: string[] = [];
    jest.spyOn(console, "log").mockImplementation((msg) => shownWidgets.push(msg));

    showWidgets();

    expect(shownWidgets).toHaveLength(7);
  });
});
typescript
afterEach(() => {
  PaginationSettings.clearOverride();
  jest.restoreAllMocks();
});

Alternately

typescript
import { showWidgets } from "../src/lib/simple";
import { PaginationSettings} from "../src/settings/pagination";

let mockedMaxPageSize = 100;
jest.mock("../src/settings", () => ({
  get settings() {
    return {
      pagination: {
        maxPageSize: mockedMaxPageSize
      }
    };
  }
}));

function ifMaxPageSizeIs(size: number) {
  mockedMaxPageSize = size;
}

describe('showWidgets', () => {
  it("throws if page size exceeds limit", () => {
    ifMaxPageSizeIs(19);
    expect(() => showWidgets(20)).toThrow("exceeds the max");
  });

  it("returns results for valid page size", () => {
    ifMaxPageSizeIs(22);
    expect(() => showWidgets(20)).not.toThrow();
  });

  it("uses default maxPageSize when no pageSize is provided", () => {
    ifMaxPageSizeIs(7);

    const shownWidgets: string[] = [];
    jest.spyOn(console, "log").mockImplementation((msg) => shownWidgets.push(msg));

    showWidgets();

    expect(shownWidgets).toHaveLength(7);
  });
});

Released under the MIT License.