【问题标题】:angular test which returns function [closed]返回函数的角度测试[关闭]
【发布时间】:2021-01-21 06:05:33
【问题描述】:

我已经写了下面的测试用例,但它没有涵盖这一行:() => service.getUserProfile()

export function userServiceFactory(service: UserService) {
  return () => service.getUserProfile();
}

测试:

 import * as userserv from './user.service';
  it('should call userServiceFactory function', () => {
    const spy = spyOn(userService, 'getUserProfile').and.callThrough();
    userService.getUserProfile();
    const result = userserv.userServiceFactory(userService);
    expect(spy).toHaveBeenCalled();
    expect(result).toBeDefined();
  });

【问题讨论】:

  • userServiceFactory 不会调用userService.getUserProfile,它会返回一个在调用时会执行此操作的函数。您的测试仅通过,因为您已经直接调用了该间谍方法,这不是一个好主意 - 您可以完全删除对 userServiceFactory 的调用,但仍然看到 expect(spy).toHaveBeenCalled() 被满足...
  • 能否指导一下如何编写覆盖所有行的测试用例?
  • 我建议你调用你的函数返回的函数。或者重新审视它返回的内容,但我们无法告诉您当前的实现是否真的正确。
  • 你是这个意思吗? it('应该调用 userServiceFactory 函数', () => { Const result=userService.getUserProfile() ; expect(result).toBeDefined(); });
  • 那将直接调用间谍,这又不是一个好主意。间谍的目的是让被测代码调用它,从测试代码调用它们是你做错事的标志。

标签: angular unit-testing jasmine


【解决方案1】:
it('should call userServiceFactory and invoke getUserProfile ', () => {
  const getUserProfileSpy = spyOn(userService, 'getUserProfile') ;
  const result = userserv.userServiceFactory(userService);
  result.call(userService.getUserProfile);
  expect(getUserProfileSpy).toHaveBeenCalled();
});

【讨论】:

    猜你喜欢
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2023-03-12
    • 2018-11-24
    • 1970-01-01
    相关资源
    最近更新 更多