用茉莉花測試錯誤和承諾

測試錯誤和承諾。我有一個類似的情況如下:

public myUtilityMethod(): Promise<string> {
  // some synchronous stuff
  console.log('bla bla');
  // some asynchronous stuff
  return Promise.resolve('ok');
}
public async doSomething(): Promise<void> {
  let promise;
  try {
    promise = this.myUtilityMethod();
  } catch (e) {
    throw new MyError('I knew it', e, {});
  }
  await Promise.all([promise]);
  return Promise.resolve();
}

我想測試一下,當(dāng)myUtilityMethod的同步部分出錯時,我拋出一個MyError,所以我編寫以下測試

it('should throw MyError when something goes wrong in the synchronous part of myUtilityMethod', fakeAsync(() => {
  // given
  const error = new Error('something went wrong');
  component.myUtilityMethod = sinon.stub().throws(error);
  // when
 expect(() => {
   component.doSomething();
   flushMicrotasks();
 }).toThrow(jasmine.any(MyError));
}));

測試失敗是因為

        Error: Expected function to throw <jasmine.any(MyError)>, but it threw Error: Uncaught (in promise): MyError: {"message":"i knew it","nativeError":{},"context":{}}.

我是不是漏掉了什么明顯的東西?

? 最佳回答:

async函數(shù)將其所有內(nèi)容包裝在一個承諾中,因此即使在遇到任何“等待”之前拋出錯誤,也會發(fā)生承諾拒絕而不是拋出錯誤的情況。以下測試通過:

  it('test test', (done) => {
    const error = new Error('something went wrong');
    component.myUtilityMethod = sinon.stub().throws(error);

    component.doSomething().catch((e) => {
      expect(e).toEqual(jasmine.any(MyError));
      done();
    });
  });
主站蜘蛛池模板: 色婷婷亚洲一区二区三区| 国产成人高清亚洲一区91| 精品国产高清自在线一区二区三区| 色系一区二区三区四区五区| 日韩人妻一区二区三区蜜桃视频| 亚洲AV无码一区二三区| 精品无码综合一区二区三区| 无码国产精品一区二区免费3p| 国产成人一区在线不卡| 国产成人精品一区二区三在线观看| 国产主播在线一区| 日韩在线不卡免费视频一区| 亚洲色无码一区二区三区| 国产在线精品一区免费香蕉| 国产91精品一区二区麻豆亚洲| 国产一区在线播放| 国产在线观看一区二区三区 | 久久亚洲色一区二区三区| 国产丝袜无码一区二区视频| 日韩在线视频一区二区三区| 国产精品美女一区二区三区| 日韩福利视频一区| 无码8090精品久久一区| 一区二区三区精品高清视频免费在线播放 | 日韩人妻精品一区二区三区视频| 亚洲综合无码精品一区二区三区| 中文字幕精品亚洲无线码一区应用| 国产激情精品一区二区三区| 中文字幕一区视频一线| 福利一区二区三区视频在线观看| 久久久久久免费一区二区三区| 久久高清一区二区三区| 精品人妻系列无码一区二区三区| 在线观看国产一区二三区| 无码丰满熟妇浪潮一区二区AV| 精品一区二区三区无码视频| 中文字幕无线码一区| 蜜桃视频一区二区三区在线观看 | 无码人妻一区二区三区av| 日韩一区二区免费视频| 精品人妻少妇一区二区|