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