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`);
  });
});