繁体   English   中英

Jasmine:如何测试 Promise.then 块?

[英]Jasmine: how to test a Promise.then block?

我想测试一个场景,我必须调用 function(从私有只读服务),其中有一个异步调用,然后一些变量正在更新等。

myFunction(param) {
    this.myService
        .serviceFunction(params)
        .then((resp) => {
          let someData = this.transformData(resp);
          this.anotherFunction(someData);
          if (param) {
            // something
          } else {
            // something else
          }
        })
        .catch((e) => {
          // catching errors
        });
  }

在我的 spec.ts 中,我试图模拟 serviceFunction 调用,但看起来它甚至根本没有进入 the.then 块。

spyOn(myService, 'serviceFunction').and.returnValue(Promise.resolve(RESPONSE_MOCK));
expect(component.transformData).toHaveBeenCalled(); // won't work

你们有任何教程/信息来测试这种情况下的 the.then 块吗? 我没有足够的知识来自己解决这个问题。 任何建议,将不胜感激。

谢谢!

Angular 中有许多选项可用于测试异步代码。一些示例是async/awaitfakeAsync/tickwaitForAsync 我将向您展示async/await/fixture.whenStable()fakeAsync/tick的示例。

异步/等待

it('does xyz', async () => {
  spyOn(myService, 'serviceFunction').and.returnValue(Promise.resolve(RESPONSE_MOCK));
  // do stuff
  //
  // Wait until all promises have resolved or rejected before continuing.
  await fixture.whenStable();

  expect(component.transformData).toHaveBeenCalled();
});

假异步/打勾

it('does xyz', fakeAsync(() => {
  spyOn(myService, 'serviceFunction').and.returnValue(Promise.resolve(RESPONSE_MOCK));
  // do stuff
  //
  // Wait until all promises have resolved or rejected before continuing.
  tick();

  expect(component.transformData).toHaveBeenCalled();
}));

您可以研究更多关于async/await/fixture.whenStable()waitForAsyncfakeAsync/tick的信息。

问题未解决?试试以下方法:

Jasmine:如何测试 Promise.then 块?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM