QUnit.test.each()

添加的版本:2.16.0

说明

QUnit.test.each( name, dataset, callback )
QUnit.test.only.each( name, dataset, callback )
QUnit.test.skip.each( name, dataset, callback )
QUnit.test.todo.each( name, dataset, callback )

使用数据提供者添加测试。

参数 说明
name(字符串) 被测单元的名称
dataset(数组) 传递给每个测试用例的数据值的数组或对象
callback(函数) 执行测试的函数

回调参数

参数 说明
assert(对象) 带有assertion methods 的新实例对象
data(任意) 数据值

使用此方法添加多个相似的测试,但传入的数据不同。

QUnit.test.each() 在内部生成对 QUnit.test() 的多个调用,并且具有所有相同的函数,例如支持异步函数、返回 Promise 和 assert 参数。

每个测试用例都会传递一个数据集的值。

only skip todo 变体也可用,分别为 QUnit.test.only.eachQUnit.test.skip.eachQUnit.test.todo.each

例子

基本数据提供者

function isEven (x) {
  return x % 2 === 0;
}

QUnit.test.each('isEven()', [2, 4, 6], (assert, data) => {
  assert.true(isEven(data), `${data} is even`);
});

数组数据提供者

原始数组将传递给您的回调。 Array destructuring 可用于直接从回调签名中解包数据数组。

function square (x) {
  return x * x;
}

QUnit.test.each('square()', [
  [2, 4],
  [3, 9]
], (assert, [value, expected]) => {
  assert.equal(square(value), expected, `${value} squared`);
});

对象数据提供者

QUnit.test.each('isEven()', {
  caseEven: [2, true],
  caseNotEven: [3, false]
}, (assert, [value, expected]) => {
  assert.strictEqual(isEven(value), expected);
});

each() 的异步函数

function isEven (x) {
  return x % 2 === 0;
}

async function isAsyncEven (x) {
  return new Promise(resolve => {
    resolve(isEven(x));
  });
}

QUnit.test.each('isAsyncEven()', [2, 4], async (assert, data) => {
  assert.true(await isAsyncEven(data), `${data} is even`);
});

使用经典的 ES5 语法从每个回调中返回一个 Promise:

function isEven (x) {
  return x % 2 === 0;
}

function isAsyncEven (x) {
  return new Promise(function (resolve) {
    resolve(isEven(x));
  });
}

QUnit.test.each('isAsyncEven()', [2, 4], (assert, value) => {
  return isAsyncEven(value).then((result) => {
    assert.true(result, `${value} is even`);
  });
});