以優雅的方式等待測試中的承諾

你可以將 function 傳遞給 test() 方法 async - 然後你可以使用 await 關鍵字。你的測試將等到 Promise 解決並測試非同步程式碼變得更容易和更易讀。在下面的示例中,返回 Promise 的呼叫是 changeset.validate()。請注意在 Ember.run 中包裝 set 呼叫。設定數量具有非同步效果(觀察者,計算屬性),因此我們需要將其包裝在 Ember.run 中。

test('quantity validation: greater than 0', async function (assert) {
    assert.expect(3);

    const model = this.subject({
        quantity: 1
    });

    const changeset = createChangeset(model);

    await changeset.validate();

    assert.ok(!changeset.get('error.quantity'));

    Ember.run(() => {
        changeset.set('quantity', -1);
    });

    await changeset.validate();

    assert.equal(changeset.get('error.quantity.validation.length'), 1);
    assert.ok(!changeset.get('isValid'));
});