单位测试角异步有望

发布于 2025-02-09 23:38:54 字数 2523 浏览 1 评论 0原文

我有一些艰难的时期试图解决一些单元测试。如果params.calltype ==='inbound',我成功地测试了该函数,但不知道如何测试params.calltype ===“其他东西”。这是我必须测试的代码:

searchObject(params: ISearchObjectParams): Promise<IScreenPopSearchObjectResult> {
return new Promise((resolve, reject) => {
  let searchParams;
  if (params.searchValuesString) {
    searchParams = params.searchValuesString;
  } else {
    const quotedSearchValues = params && params.searchValues && params.searchValues.map(x => '"' + x + '"');
    searchParams = quotedSearchValues && quotedSearchValues.join(' OR ');
  }
  if (params.callType === 'inbound') {
    sforce.opencti.searchAndScreenPop({
      searchParams: searchParams,
      queryParams: params.queryParams,
      callType: params.callType,
      deferred: true,
      callback: response => {
        if (response.success) {
          resolve(this.createSearchObjectResult(response));
        } else {
          reject(this.parseLightningError(response, LocaleKeys.searchObject));
        }
      }
    });
  }
});

这是我进行的单位测试, if(params.calltype ==='inbound')。

it('should resolve with parsed search result', async () => {
      service.createSearchObjectResult = jasmine.createSpy().and.returnValue({});
      sforce.opencti.searchAndScreenPop = jasmine.createSpy().and.callFake((params: {
        callback: (response: { returnValue: { runApex: string }, success: boolean }) => void
      }) => {
        params.callback({ success: true } as any);
      });
      await expectAsync(service.searchObject({ searchValues: ['value1', 'value2'], callType: 'inbound' } as any)).toBeResolvedTo({} as any);
      testUtils.expectSingleCall(service.createSearchObjectResult, { success: true });
    });

i '试图使其成为 ,但我无法成功。 :

  it('should not resolve if is not inbound', async () => {
      sforce.opencti.searchAndScreenPop = jasmine.createSpy().and.callFake((params: {
        callback: (response: { returnValue: { runApex: string }, success: boolean }) => void
      }) => {
        params.callback({ success: false } as any);
      });
      await expectAsync(service.searchObject({ searchValuesString: 'value1&&value2', callType: 'inbound' } as any)).toBeRejected({} as any);
      testUtils.expectNotCalled(sforce.opencti.searchAndScreenPop);
      expect(sforce.opencti.searchAndScreenPop).not.toHaveBeenCalled();
    });

请提出建议?

I have some hard times trying to resolve some unit testing. I succeed in testing the function if params.callType === 'inbound' but don't know how to test if params.calltype === "something else". Here is the code I have to test:

searchObject(params: ISearchObjectParams): Promise<IScreenPopSearchObjectResult> {
return new Promise((resolve, reject) => {
  let searchParams;
  if (params.searchValuesString) {
    searchParams = params.searchValuesString;
  } else {
    const quotedSearchValues = params && params.searchValues && params.searchValues.map(x => '"' + x + '"');
    searchParams = quotedSearchValues && quotedSearchValues.join(' OR ');
  }
  if (params.callType === 'inbound') {
    sforce.opencti.searchAndScreenPop({
      searchParams: searchParams,
      queryParams: params.queryParams,
      callType: params.callType,
      deferred: true,
      callback: response => {
        if (response.success) {
          resolve(this.createSearchObjectResult(response));
        } else {
          reject(this.parseLightningError(response, LocaleKeys.searchObject));
        }
      }
    });
  }
});

Here is the unit test I made that is working for the "if (params.callType === 'inbound').

it('should resolve with parsed search result', async () => {
      service.createSearchObjectResult = jasmine.createSpy().and.returnValue({});
      sforce.opencti.searchAndScreenPop = jasmine.createSpy().and.callFake((params: {
        callback: (response: { returnValue: { runApex: string }, success: boolean }) => void
      }) => {
        params.callback({ success: true } as any);
      });
      await expectAsync(service.searchObject({ searchValues: ['value1', 'value2'], callType: 'inbound' } as any)).toBeResolvedTo({} as any);
      testUtils.expectSingleCall(service.createSearchObjectResult, { success: true });
    });

I'm trying to make it for the else, but I can't succeed. This is what I tried for params.callType === "outbound"(that should be the else condition):

  it('should not resolve if is not inbound', async () => {
      sforce.opencti.searchAndScreenPop = jasmine.createSpy().and.callFake((params: {
        callback: (response: { returnValue: { runApex: string }, success: boolean }) => void
      }) => {
        params.callback({ success: false } as any);
      });
      await expectAsync(service.searchObject({ searchValuesString: 'value1&&value2', callType: 'inbound' } as any)).toBeRejected({} as any);
      testUtils.expectNotCalled(sforce.opencti.searchAndScreenPop);
      expect(sforce.opencti.searchAndScreenPop).not.toHaveBeenCalled();
    });

Suggestions please?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

始终不够 2025-02-16 23:38:54

如果Promise-doctions未缓存,它将起泡并丢弃错误。因此,也许您应该增加对错误的期望

expect(service.searchObject).toThrow();

If the Promise-Rejection isn't cached, it will bubble up and throw the error. So maybe you should add an expectation for the error like

expect(service.searchObject).toThrow();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文