我怎样才能得到这个承诺的价值?

时间:2021-03-09 12:21:42

标签: angular typescript promise jasmine es6-promise

在编写单元测试时,我遇到了一个必须异步使用 promise 的用例。

我怎样才能得到这个承诺的价值?

let purposes: Promise<ProcessingPurpose[]> = new Promise((resolve, reject) => {
    return [{ id: 'id1', name:'p1'}, {id: 'id2', name: 'p2'}];
});

我在下面尝试了这个解决方案。但我想把条件 expect(value).toEqual(metadataServiceTest.getPurposes()) 放在 THEN() 之外

metadataV1ClientTestSpy.getAllProcessingPurposes.and.returnValue(purposes);
purposes.then(value => expect(value).toEqual(metadataServiceTest.getPurposes()));

预期的结果应该是一个对象数组。

1 个答案:

答案 0 :(得分:0)

Promises 的目标是处理异步操作。 因此,您的代码不一定按书面顺序执行。

这最常用于网络相关数据获取,但也可用于并行化 Javascript 代码的执行。因为 JS 是单线程的。

如果您将条件放在 then() 之外,您将无法知道 value 执行时是否已提交 expect(value).toEqual(metadataServiceTest.getPurposes())

此外,如果您的代码不是异步的,您可能不需要 Promise,它会返回您期望的线性流程。

相关问题