【问题标题】:How do I check (assert) if an Ember Promise is settled?我如何检查(断言)Ember Promise 是否已结算?
【发布时间】:2018-11-12 02:30:37
【问题描述】:

我有一个 Ember Promise 作为我正在测试的服务方法的结果返回。我正在使用 Ember 2.16 和 qunit。

let promise = service.myFunctionBeingTested();
promise.then((resolveParam) => {
    assert.equal(resolveParam, EXPECTED_VAL);
}).catch(() => {
    assert.notOk("Promise rejected");
}

// Code here is supposed to trigger resolution of promise...

// Code here to make sure the promise is resolved and assert is run

我可以使用什么(在应解决承诺之后)来确保承诺已解决且assert.equal(resolveParam, EXPECTED_VAL); 已运行?

似乎应该很容易检查承诺是否已解决,但 Ember 关于 rsvp 承诺的文档要么太难导航,要么不存在 ????我可以使用assert.expect(/* COUNT */),但是以后的用户每次添加新的断言时都必须更新这个数字,而我想避免这种情况。

【问题讨论】:

    标签: javascript ember.js promise qunit


    【解决方案1】:

    在您的测试开始时,使用assert.expect(1) 告诉测试您正期待 1 个断言。那你应该很好。如果承诺失败,您的notOk 将被调用并且测试将失败。如果 Promise 解决,测试将通过。

    如果这不是验收测试,您可能需要:

    import wait from 'ember-test-helpers/wait'
    

    然后从您的测试返回等待调用,以确保测试在检查它是否获得正确数量的断言之前等待您的承诺:

     return wait()
    

    更新

    没有assert.expect 的另一种方法是在like 之前声明一个变量:

    let successCalled = false
    

    然后在成功块中

    promise.then((resolveParam) => {
        successCalled = true
    })
    

    然后,做:

    return wait().then(() => {
         assert.ok(successCalled)
    })
    

    虽然,assert.expect 是为此目的而存在的,所以我建议使用它。

    【讨论】:

    • 我在问题中确实提到我意识到我可以使用assert.expect ...我希望有一个可以检查的promise属性,以便我可以使用直接断言(出于原因问题中提到)。
    猜你喜欢
    • 2018-06-17
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多