【问题标题】:jasmine expectedAsync for async function doesn't work用于异步功能的 jasmine expectedAsync 不起作用
【发布时间】:2021-05-30 14:43:28
【问题描述】:

我正在运行以下测试:

it("should get rejected", async done => {
      class someTest {
        async run(){
          return this.rejectFunc();
        }
        async rejectFunc(){
          return new Promise( (_,reject)=>{
            setTimeout(()=>{
              reject()
            },300)
          })
        }
      }

      const test = new someTest();
      spyOn(test, 'rejectFunc').and.callThrough();
      test.run()      
      await expectAsync(test.rejectFunc).toBeRejected();  
      done();
    });

但测试超时失败:

错误:超时 - 未在超时内调用异步回调 由 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定。

我做错了什么?我想运行run 方法并验证rejectFunc 是否被拒绝。

【问题讨论】:

    标签: javascript unit-testing jasmine


    【解决方案1】:

    这是我第一次看到expectAsync,但它希望接受一个承诺,而不是一个函数的名称。

    所以试试这个:

    // call the function with ()
    await expectAsync(test.rejectFunc()).toBeRejected();
    

    另一种测试方法是:

    try {
      await test.rejectFunc();
    } catch (error) {
      // call done here, meaning promise was rejected and therefore we can assert
      // it was rejected
      done();
    }
    

    编辑

    const test = new someTest();
    spyOn(test, 'rejectFunc').and.callThrough();
    try {
      await test.run();
    } catch (e) {
      expect(test.rejectFunc).toHaveBeenCalled();
    }
        
    done();
    

    【讨论】:

    • 但是我不想直接调用test.rejectFunc——只是为了验证在我运行test.run()时它被调用并被拒绝
    • 看看我的编辑,你也可以试试。
    猜你喜欢
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多