【问题标题】:How can I let Jasmine wait for a promise to be resolved or rejected?我怎样才能让 Jasmine 等待承诺被解决或拒绝?
【发布时间】:2023-03-10 07:34:01
【问题描述】:

我有一个特定的功能,我正在尝试使用 Angular 进行测试。此函数返回一个承诺。尽管在我的测试中我设定了对承诺结果的期望,但 Jasmine 不会等待承诺被解决或拒绝。

警告:

错误:'Spec 'test' 没有预期。'

被测函数定义如下:

public validate(file: File): Promise<any[]> {
    return new Promise((resolve, reject) => {
      // Code
    }
}

测试代码:

it(
    test.description,
    fakeAsync(() => {
      // Doesnt wait for the following promise result:
      importValidator.validate(test.testFile).then(
        resolveValue => {
          expect(Array.isArray(resolveValue)).toBe(true);
        },
        onReject => {
          expect(test.resolve).toBeFalsy();
        }
      );
    })
  );

如何让 Jasmine 在测试期间等待验证承诺被解决/拒绝?当我让测试因预期未发生的事情而失败时,它实际上会在afterAll 中引发错误。

【问题讨论】:

    标签: angular testing promise jasmine


    【解决方案1】:

    正如https://jasmine.github.io/tutorials/async 中所解释的,存在使用 Jasmine 测试异步代码的不同方法。

    一种可能的方法是使用done 函数。

    it('#validate should return array', (done) => {
        importValidator.validate(test.testFile)
            .then(resolveValue => {
                expect(Array.isArray(resolveValue)).toBe(true);
                done();
            })
            .catch(err => fail(err));
        );
    });
    

    【讨论】:

    • 谢谢,这有帮助。我之前已经尝试过,但没有删除fakeAsync,然后它不起作用。
    猜你喜欢
    • 2019-10-23
    • 2016-08-18
    • 2019-05-07
    • 2018-11-20
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2013-02-22
    • 2018-12-08
    相关资源
    最近更新 更多