Jest

Using Matchers

Eslint Plugin, Vscode Ext, awesome-jest

[jest.io] using-matchers

[jest.io] except reference

expect(2 + 2).toBe(4);
expect(data).toEqual({one: 1, two: 2});
for (let a = 1; a < 10; a++) {
  for (let b = 1; b < 10; b++) {
    expect(a + b).not.toBe(0);
  }
}

Truthiness

const n = null;
expect(n).toBeNull();
expect(n).toBeDefined();
expect(n).not.toBeUndefined();
expect(n).not.toBeTruthy();
expect(n).toBeFalsy();

Numbers

expect(value).toBeGreaterThan(3);
expect(value).toBeGreaterThanOrEqual(3.5);
expect(value).toBeLessThan(5);
expect(value).toBeLessThanOrEqual(4.5);

expect(value).toBeCloseTo(0.3)

Strings

expect('team').not.toMatch(/I/);

Arrays

expect(shoppingList).toContain('beer');

Exceptions

expect(compileAndroidCode).toThrow();

Async callback

test('the data is peanut butter', done => {
  function callback(data) {
    expect(data).toBe('peanut butter');
    done();
  }
  fetchData(callback);
});

Async await

test('the data is peanut butter', async () => {
  expect.assertions(1);
  const data = await fetchData();
  expect(data).toBe('peanut butter');
});

Scope

describe('matching cities to foods', () => {
// Applies only to tests in this describe block
beforeEach(() => {
  return initializeFoodDatabase();
});
beforeEach(() => {
  initializeCityDatabase();
});

afterEach(() => {
  clearCityDatabase();
});
beforeAll(() => {
  return initializeCityDatabase();
});

afterAll(() => {
  return clearCityDatabase();
});