如何测试在代码块中具有await语句的角度异步功能

问题描述 投票:0回答:1

我正在尝试使用业力和茉莉花来测试简单的角度函数。

class

export class Acl {
  async caller() {
    console.log("first statement");
    const calledMe = await this.callMe().toPromise();
    return calledMe;
  }

  callMe() {
    return new Observable((observer) => observer.next({ something: "key" }));
  }
}

测试文件

import { Acl } from "./main";
import { fakeAsync, tick } from "@angular/core/testing";
import { Observable } from "rxjs";

describe("Hello world", () => {
  it("test the async", fakeAsync(() => {
    const t = new Acl();
    spyOn(t, "callMe").and.returnValue(
      new Observable((observer) => observer.next({ something: "key" }))
    );

    const cl = t.caller();

    console.log("a print ", cl);
    tick();
  }));
});

测试用例中print语句的输出是enter image description here

如何测试这些功能。

angular unit-testing rxjs karma-jasmine
1个回答
0
投票

您的测试应该至少由一个期望组成,否则您不是要测试特定的结果,而只是代码运行没有错误。

在您的情况下,我认为您可以将间谍存储为常量,然后期望它在tick之后被调用,像这样:

describe("Hello world", () => {
  it("test the async", fakeAsync(() => {
    const t = new Acl();
    const spy = spyOn(t, "callMe").and.returnValue(
      new Observable((observer) => observer.next({ something: "key" }))
    );

    t.caller();
    tick();

    expect(spy).toHaveBeenCalled()
  }));
});
© www.soinside.com 2019 - 2024. All rights reserved.