assert.async()

添加的版本:1.16.0

說明

async( count = 1 )

指示 QUnit 等待異步操作。

名字 說明
count(數字) 測試將恢複之前的預期調用次數。默認為 1

assert.async() 返回一個回調函數並暫停測試處理,直到回調函數被調用。如果調用的次數超過所需的調用次數,回調將拋出 Error

這取代了以前由 QUnit.stop() QUnit.start() 提供的函數。

例子

等待回調

告訴 QUnit 等待來自回調的 done() 調用。

function fetchDouble (num, callback) {
  const double = num * 2;
  callback(double);
}

QUnit.test('async example', assert => {
  const done = assert.async();

  fetchDouble(21, res => {
    assert.strictEqual(res, 42, 'Result');
    done();
  });
});

等待多個回調

多次調用assert.async() 以等待多個異步操作。每個done 回調必須隻調用一次才能通過測試。

QUnit.test('two async calls', assert => {
  const done1 = assert.async();
  const done2 = assert.async();

  fetchDouble(3, res => {
    assert.strictEqual(res, 6, 'double of 3');
    done1();
  });
  fetchDouble(9, res => {
    assert.strictEqual(res, 18, 'double of 9');
    done2();
  });
});

需要多次調用

count 參數可用於要求對同一回調進行多次調用。在下麵的示例中,測試在恰好三個調用之後通過。

function uploadBatch (batch, notify, complete) {
  batch.forEach((item) => {
    // Do something with item
    notify();
  });
  complete(null);
}

QUnit.test('multiple calls example', assert => {
  assert.timeout(1000);

  const notify = assert.async(3);
  const done = assert.async();

  uploadBatch(
    ['a', 'b', 'c'],
    notify,
    (err) => {
      assert.strictEqual(err, null, 'complete error parameter');

      done();
    }
  );
});