Jest - 使用匹配器 Using Matchers

2019-08-25  本文已影响0人  小黄人get徐先生

Jest 是用 ”匹配器(matchers)让你以不同的方式测试值。这个文档将介绍一些通用的匹配器。完整的列表,查看 expect API doc

通用匹配器

最简单的方式,测试两个值是否相等。

test('two plus two is four', () => {
  expect(2 + 2).toBe(4);
});

在这段代码中,expect(2 + 2)返回一个 "expectation" 对象。通常,您不会对这些期望对象做太多操作,除非对它们调用匹配器。在这段代码中,.toBe(4) 是一个匹配器。当 Jest 运行,它追踪所有失败的匹配器为了能打印出漂亮的错误信息。

toBe 使用 Object.is 来测试相等。如果你想检查对象的值,可以使用 toEqual

test('object assignment', () => {
  const data = {one: 1};
  data['two'] = 2;
  expect(data).toEqual({one: 1, two: 2});
});

toEqual 递归地检查对象或数组中的每个字段。
你也可以测试匹配器的反面:

test('adding positive numbers is not zero', () => {
  for (let a = 1; a < 10; a++) {
    for (let b = 1; b < 10; b++) {
      expect(a + b).not.toBe(0);
    }
  }
});
真实与否

在测试中,你有时候需要区分 undefinednullfalse,但是有些时候你不想区别对待它们。Jest 包含了一些辅助方法,可以让你明确地表达你想要什么。

例如:

test('null', () => {
  const n = null;
  expect(n).toBeNull();
  expect(n).toBeDefined();
  expect(n).not.toBeUndefined();
  expect(n).not.toBeTruthy();
  expect(n).toBeFalsy();
});

test('zero', () => {
  const z = 0;
  expect(z).not.toBeNull();
  expect(z).toBeDefined();
  expect(z).not.toBeUndefined();
  expect(z).not.toBeTruthy();
  expect(z).toBeFalsy();
});

您应该使用最精确地对应于您希望代码执行的操作的匹配器。

数字

大多数比较数字的方法都有对应的匹配器方法。

test('two plus two', () => {
  const value = 2 + 2;
  expect(value).toBeGreaterThan(3);
  expect(value).toBeGreaterThanOrEqual(3.5);
  expect(value).toBeLessThan(5);
  expect(value).toBeLessThanOrEqual(4.5);

  // toBe and toEqual are equivalent for numbers
  expect(value).toBe(4);
  expect(value).toEqual(4);
});

对于浮点等式,使用 toBeCloseTo 而不是 toEqual,因为您不希望测试依赖于一个很小的四舍五入误差。

字符串

你可以使用正则检查字符串通过 toMatch

test('there is no I in team', () => {
  expect('team').not.toMatch(/I/);
});

test('but there is a "stop" in Christoph', () => {
  expect('Christoph').toMatch(/stop/);
});
数组和可迭代

你可以检查数组或可迭代包含特定的条目通过使用 toContain

const shoppingList = [
  'diapers',
  'kleenex',
  'trash bags',
  'paper towels',
  'beer',
];

test('the shopping list has beer on it', () => {
  expect(shoppingList).toContain('beer');
  expect(new Set(shoppingList)).toContain('beer');
});
异常

如果你想特使特定的函数被调用时抛出一个异常,使用 toThrow

function compileAndroidCode() {
  throw new ConfigError('you are using the wrong JDK');
}

test('compiling android goes as expected', () => {
  expect(compileAndroidCode).toThrow();
  expect(compileAndroidCode).toThrow(ConfigError);

  // You can also use the exact error message or a regexp
  expect(compileAndroidCode).toThrow('you are using the wrong JDK');
  expect(compileAndroidCode).toThrow(/JDK/);
});
更多

这只是一小部分。完整的匹配器列表,可以查看

上一篇下一篇

猜你喜欢

热点阅读