跳到主要内容

Expect

toBenode.jsbrowser​

Signature: expect(received).toBe(expected)

  • received <any>
  • expected <any>

Returns <void>

"toBe" is used to compare whether the primitive values are equal or whether objects belong to the same reference.

import { test, expect } from 'xbell';

const man = {
name: 'Mike',
bag: ['vodka'],
};

test('check primitives value', () => {
expect(man.name).toBe('Mike');
});

test('check reference value', () => {
const bagRef = man.bag;

expect(man.bag).toBe(bagRef);
expect(man.bag).not.toBe(['vodka']);
});

toEqual​

Signature: expect(received).toEqual(value)

  • received <any>
  • value <any>

Returns <void>

toEqual is used to assert that compare recursively all properties of object instances (also known as "deep" equality).

Example

import { test } from 'xbell';

test('toEqual', ({ expect }) => {
const obj1 = {
key: 'value',
};

const obj2 = {
key: 'value',
};

expect(obj1).not.toBe(obj2);
// to euqal
expect(obj1).toEqual(obj2);
});

toContain​

Signature: expect(received).toContain(value)

  • received<Array | string | IterableIterator>
  • value <any>

Returns <void>

toContain is used to assert that an item is in an array. It uses ===, a strict equality check.

Example

import { test } from 'xbell';

test('toContain', ({ expect }) => {
expect([1, 2, 3]).toContain(1);
expect('abc').toContain('a');
});

toContainEqual​

Signature: expect(received).toContainEqual(value)

  • received<Array | string | IterableIterator>
  • value <any>

Returns <void>

toContainEqual is used to assert that an item is in an array. It uses toEqual to compare item.

Example

import { test } from 'xbell';

test('toContainEqual', ({ expect }) => {
expect([{ key: 'value' }]).toContainEqual({ key: 'value' });
expect('abc').toContainEqual('a');
});

toBeDefinednode.jsbrowser​

Signature: expect(received).toBeDefined()

  • received <any>

Returns <void>

toBeDefined() is used to assert that the value is not equal to undefined , same as .not.toBe(undefined) .

Usually used to check if a function has a return value.

Example

import { test, expect } from 'xbell';

function createSomething() {
return Math.random();
}

test('it always creates something', () => {
expect(createSomething()).toBeDefined();
});

toBeUndefined node.jsbrowser​

Signature: expect(received).toBeUndefined()

  • received <any>

Returns <void>

toBeUndefined() is used to assert that the value is undefined , same as toBe(undefined) .

Usually used to check if a function returns undefined.

Exmaple

import { test, expect } from 'xbell';

function getName(person) {
return person?.name;
}

test('getName returns undefined when passed a empty value', () => {
expect(getName()).toBeUndefined();
});

toBeNull node.jsbrowser​

Signature: expect(received).toBeNull()

  • received <any>

Returns <void>

toBeNull() asserts that the value is null , same as toBe(null) .

import { test, expect } from 'xbell';

function getSomething(make) {
if (make) {
return Math.random();
}

return null;
}

test('get something is null', () => {
expect(getSomething()).toBeNull();
});

toBeTruthy​

Signature: expect(received).toBeTruthy()

  • received <any>

Returns <void>

import { test, expect } from 'xbell';

function createSomething() {
return 1 + Math.random();
}

test('createSomething returns value to be truthy', () => {
expect(createSomething()).toBeTruthy();
});

toBeFalsy​

Signature: expect(received).toBeFalsy()

  • received <any>

Returns <void>

import { test, expect } from 'xbell';

function createNothing() {
return null;
}

test('createSomething returns value to be falsy', () => {
expect(createNothing()).toBeFalsy();
});

toHaveLength​

Signature: expect(received).toHaveLength(length)

  • received <{ length: number }>
  • length <number>

toHaveLength is used to check that an object has a .length property and it is set to a certain numeric value.

Example

test('toHaveLength', ({ expect }) => {
expect([1, 2, 3]).toHaveLength(3);
expect('a').toHaveLength(1);
expect('').not.toHaveLength(1);
});

toBeTypeOf​

Signature: expect(received).toBeTypeOf(type)

  • received <any>
  • type <{'function' | 'number' | 'string' | 'object' | 'boolean' | 'undefined' | 'symbol' | 'bigint'}>

Returns <void>

  import { test } from 'xbell';

class Dog {
eat() {}
}

test('the dog has a method of eating', ({ expect }) => {
const dog = new Dog();

expect(dog.eat).toBeTypeOf('function');
});

toBeLessThan​

Signature: expect(received).toBeLessThan(num)

  • received <number>
  • num <number>

Returns <void>

toBeLessThanOrEqual​

Signature: expect(received).toBeLessThanOrEqual(num)

  • received <number>
  • num <number>

Returns <void>

toBeLessThanOrEqual is used to assert that the value is less than or equal to the target value.

Example

import { test } from 'xbell';

test('toBeLessThanOrEqual', ({ expect }) => {
expect(6).toBeLessThanOrEqual(6);
expect(6).toBeLessThanOrEqual(8);
});

toBeGreaterThan​

Signature: expect(received).toBeGreaterThan(num)

  • received <number>
  • num <number>

Returns <void>

toBeGreaterThan is used to assert that the value is greater than the target value.

Example

import { test } from 'xbell';

test('toBeLessThanOrEqual', ({ expect }) => {
expect(6).toBeGreaterThan(5);
});

toBeGreaterThanOrEqual​

Signature: expect(received).toBeGreaterThanOrEqual(num)

  • received <number>
  • num <number>

Returns <void>

toBeGreaterThanOrEqual is used to assert that the value is greater than or equal to the target value.

Example

import { test } from 'xbell';

test('toBeGreaterThanOrEqual', ({ expect }) => {
expect(6).toBeGreaterThanOrEqual(5);
expect(6).toBeGreaterThanOrEqual(6);
});

toBeNaN​

Signature: expect(received).toBeNaN()

  • received <number>

Returns <void>

toBeNaN is used to assert that the value is NaN.

Example

test('toBeNaN', ({ expect }) => {
expect(NaN).toBeNaN();
expect(1).not.toBeNaN();
});

toBeCloseTo​

Signature: expect(received).toBeCloseTo(num, numDigits?)

  • received <number>
  • num <number>
  • numDigits <number>

Returns <void>

Use toBeCloseTo to compare floating point numbers for approximate equality.

The optional numDigits argument limits the number of digits to check after the decimal point. For the default value 2, the test criterion is Math.abs(expected - received) < 0.005 (that is, 10 ** -2 / 2).

Intuitive equality comparisons often fail, because arithmetic on decimal (base 10) values often have rounding errors in limited precision binary (base 2) representation. For example, this test fails:

test('adding works sanely with decimals', ({ expect }) => {
expect(0.2 + 0.1).toBe(0.3); // Fails!
});

Example

test('adding works sanely with decimals', ({ expect }) => {
expect(0.2 + 0.1).toBeCloseTo(0.3);
});

toHaveProperty​

Signature: expect(received).toHaveProperty(key, value?)

  • received <number>
  • key <string> object's key
  • value? <any>

Returns <void>

toHaveBeenCalled​

Signature: expect(received).toHaveBeenCalled()

  • received <Mock> The mock function

Returns <void>

Use toHaveBeenCalled to ensure that a mock function is called.

Exmaple

import { test } from 'xbell';

test('toHaveBeenCalled', ({ expect, fn, spyOn }) => {
const object = {
method() {}
};

const handleClick = fn();
spyOn(object, 'method');

handleClick();
object.method();

expect(handleClick).toHaveBeenCalled();
expect(object.method).toHaveBeenCalled();
});

toHaveBeenCalledTimes​

Signature: expect(received).toHaveBeenCalledTimes(times)

  • received <Mock> The mock function
  • times <number>

Returns <void>

Use toHaveBeenCalledTimes to ensure that a mock function got called exact number of times.

import { test } from 'xbell';

test('toHaveBeenCalledTimes', ({ expect, fn, spyOn }) => {
const object = {
method() {}
};

const handleClick = fn();
spyOn(object, 'method');

handleClick();
object.method();
object.method();

expect(handleClick).toHaveBeenCalledTimes(1);
expect(object.method).toHaveBeenCalledTimes(2);
});

toHaveBeenCalledWith​

Signature: expect(received).toHaveBeenCalledWith(...args)

  • received <Mock> The mock function
  • args <any[]> Expect arguments

Returns <void>

Use toHaveBeenCalledWith to ensure that a mock function was called with specific arguments. The arguments are checked with the same algorithm that toEqual uses.

Example

import { test } from 'xbell';

test('toHaveBeenCalledWith', ({ expect, fn, spyOn }) => {
const object = {
method() {}
};

const handleClick = fn();
spyOn(object, 'method');

handleClick('str');
object.method(1, 2);

expect(handleClick).toHaveBeenCalledWith('str');
expect(object.method).toHaveBeenCalledWith(1, 2);
});

toHaveBeenLastCalledWith​

Signature: expect(received).toHaveBeenLastCalledWith(...args)

  • received <Mock> The mock function
  • args <any[]> Expect arguments

Returns <void>

Use toHaveBeenLastCalledWith to ensure that the mock function is called the last time with the specified arguments.

Example

import { test } from 'xbell';

test('toHaveBeenLastCalledWith', ({ expect, fn, spyOn }) => {
const handleClick = fn();

handleClick('str');
handleClick(1, 2);

expect(handleClick).toHaveBeenCalledWith('str');
expect(handleClick).toHaveBeenLastCalledWith(1, 2);
});

toHaveBeenNthCalledWith​

Signature: expect(received).toHaveBeenNthCalledWith(nthCall, ...args)

  • received <Mock> The mock function
  • nthCall <number> The NTH call
  • args <any[]> Expect arguments

Returns <void>

Use toHaveBeenNthCalledWith to ensure that the mock function was called the nth time with the specified arguments.

Example

import { test } from 'xbell';

test('toHaveBeenNthCalledWith', ({ expect, fn, spyOn }) => {
const handleClick = fn();

handleClick('one', 'one');
handleClick('two', 'two');
handleClick('three', 'three');

expect(handleClick).toHaveBeenNthCalledWith(1, 'one', 'one');
expect(handleClick).toHaveBeenNthCalledWith(3, 'three', 'three');
});

toHaveReturned​

Signature: expect(received).toHaveReturned()

  • received <Mock> The mock function

Returns <void>

Use toHaveReturned to ensure that a mock function successfully returned (i.e., did not throw an error) at least one time.

Example

import { test } from 'xbell';

test('toHaveReturned', ({ expect, fn, spyOn }) => {
const add = (a: number, b: number) => a + b;
const someOne = {
makeSomething() {
return 'something';
},
};

const mockAdd = fn(add);
spyOn(someOne, 'makeSomething');

add(1, 1);
someOne.makeSomething();

expect(mockAdd).toHaveReturned();
expect(someOne.makeSomething).toHaveReturned();
});

toHaveReturnedTimes​

Signature: expect(received).toHaveReturnedTimes(times)

  • received <Mock> The mock function
  • times <number> Number of calls

Returns <void>

Use toHaveReturnedTimes to ensure that a mock function returned successfully (i.e., did not throw an error) an exact number of times. Any calls to the mock function that throw an error are not counted toward the number of times the function returned.

Example

import { test } from 'xbell';

test('toHaveReturnedTimes', ({ expect, fn, spyOn }) => {
const add = (a: number, b: number) => a + b;
const someOne = {
makeSomething() {
return 'something';
},
};

const mockAdd = fn(add);
spyOn(someOne, 'makeSomething');

add(1, 1);
add(1, 1);
someOne.makeSomething();
someOne.makeSomething();
someOne.makeSomething();

expect(mockAdd).toHaveReturnedTimes(2);
expect(someOne.makeSomething).toHaveReturnedTimes(3);
});

toHaveReturnedWith​

Signature: expect(received).toHaveReturnedWith(value)

  • received <Mock> The mock function
  • value <any> The return value

Returns <void>

Use toHaveReturnedWith to ensure that a mock function was called with specific return value. The return value are checked with the same algorithm that toEqual uses.

Example

import { test } from 'xbell';

test('toHaveReturnedWith', ({ expect, fn, spyOn }) => {
const add = (a: number, b: number) => a + b;
const someOne = {
makeSomething() {
return 'something';
},
};

const mockAdd = fn(add);
spyOn(someOne, 'makeSomething');

add(1, 1);
someOne.makeSomething();

expect(mockAdd).toHaveReturnedWith(2);
expect(someOne.makeSomething).toHaveReturnedWith('something');
});

toHaveLastReturnedWith​

Signature: expect(received).toHaveLastReturnedWith(value)

  • received <Mock> The mock function
  • value <any> The return value of the last called

Returns <void>

Use toHaveLastReturnedWith to ensure that a mock function was called the last time with specific return value. The return value are checked with the same algorithm that toEqual uses.

Example

import { test } from 'xbell';

test('toHaveLastReturnedWith', ({ expect, fn, spyOn }) => {
const add = (a: number, b: number) => a + b;
const someOne = {
makeSomething() {
return 'something';
},
};

const mockAdd = fn(add);
spyOn(someOne, 'makeSomething');

add(1, 1);
add(2, 2);
someOne.makeSomething();

expect(mockAdd).toHaveLastReturnedWith(4);
expect(someOne.makeSomething).toHaveLastReturnedWith('something');
});

toHaveNthReturnedWith​

Signature: expect(received).toHaveNthReturnedWith(nthCall, value)

  • received <Mock> The mock function
  • nthCall <number> The NTH call
  • value <any> The return value of the last called

Returns <void>

Use toHaveNthReturnedWith to ensure that a mock function was called the nth time with specific return value. The return value are checked with the same algorithm that toEqual uses.

Example

import { test } from 'xbell';

test('toHaveNthReturnedWith', ({ expect, fn, spyOn }) => {
const add = (a: number, b: number) => a + b;
const someOne = {
makeSomething() {
return 'something';
},
};

const mockAdd = fn(add);
spyOn(someOne, 'makeSomething');

add(1, 1);
add(20, 20);
add(3, 3);
someOne.makeSomething();

expect(mockAdd).toHaveNthReturnedWith(2, 40);
expect(someOne.makeSomething).toHaveNthReturnedWith(1, 'something');
});

toBeVisible node.js​

Signature: expect(received).toBeVisible(options?)

  • received <Locator | ElementHandle> Locator or element handle
  • options? < object >
    • timeout? <number> Time to retry the assertion for.

Returns <void>

Use toBeVisible to ensure that a locator or element handle points to an attached and visible DOM node.

import { test } from 'xbell';

test('toBeVisible', ({ expect, page, spyOn }) => {
await page.goto('https://github.com/x-bell/xbell')

const slogan = page.getByText('Make Web testing easy.')

await expect(slogan).toBeVisible();
});

toBeHidden​

Signature: expect(received).toBeHidden(options?)

  • received <Locator | ElementHandle> Locator or element handle
  • options? < object >
    • timeout? <number> Time to retry the assertion for.

Returns <void>

Use toBeHidden to ensure that a locator or element handle either does not resolve to any DOM node, or resolves to a non-visible one.

import { test } from 'xbell';

test('toBeHidden', ({ expect, page, spyOn }) => {
await page.goto('https://github.com/x-bell/xbell')

const slogan = page.getByText('Make Web testing hard.')

await expect(slogan).toBeHidden();
});

toBeChecked​

toBeDisabled​

toBeEmpty​

toBeEnabled​

toBeFocused​

toHaveText​

toContainText​

toHaveAttribute​

toHaveClass​

toHaveId​

toHaveCount​

toMatchImageScreenshot​

toMatchSnapshot​