当前位置: 首页 > 知识库问答 >
问题:

如何在angular/typescript中测试私有方法?

蒋招
2023-03-14

我有一个Angular 11项目,我不知道如何测试私有方法。

下面是一个代码示例:

ngOnInit() {
    this.addSubscription(this.myServiceFacade.myService.reloadEvent.subscribe(
        this.foo.bind(this)
    ));
}

private foo() {
    this.myString = 'test';
    this.bar(MyStatus.Enum);
}

有什么想法吗?

共有2个答案

翟单弓
2023-03-14

免责声明此技巧只能用于测试,而不能用于生产!

有一个typescript技巧可以用来访问私有成员——将索引操作符与字符串中的成员一起使用,因此:

someObjectWithPrivateMembers['privateMemberName']();

好的一点是,您可以保持类型安全,因为typeScript会查找私有成员的类型。

小心不要在字符串中输入错别字(对于不存在的成员),因为typescript不会抱怨,结果将用any类型来定义。

颛孙星海
2023-03-14

您可以通过调用公共方法来测试私有方法。为您的组件创建一个测试平台,创建一个模拟的myservicecfacade,以便它发送一个重新加载事件,并验证myString之后是否等于'test'

 类似资料:
  • 我的任务是为其他人实现的一些组件实现测试。我尽量不修改他们的代码,但我发现这很难,因为他们把所有的方法都私有化了,而且他们在方法中发出HTTP请求并订阅它,这让我很难弄清楚最好的测试场景是什么。下面是一个例子: 总而言之: > 这种情况最好的测试场景是什么?

  • 有没有任何变通办法来直接测试那些方法而不公开它们?

  • 公共方法getA()的测试按预期工作,但私有方法getB()的测试不返回模拟值“b”,而是返回与方法getB()的实际返回值相对应的“b”。必须如何调整对getB()的测试,以便返回模拟值“b”?

  • 我在网上读了一些讨论。他们说,我们不应该对私有方法进行单元测试或检查私有状态,因为这是实现细节,是糟糕设计的标志。但就我而言,我真的不知道如何做得更好。 下面是一个示例代码(我的实际代码是使用factory编写的,但我尝试使用纯js创建一个相同的案例,这样每个人都更容易理解,因为相同的原因是闭包): 在我真正的应用程序中,我可以注入和模拟本地存储,但这是一个问题。我的问题是如何测试方法是否设置了其

  • 我正在阅读一书,在中提到: 为了便于测试,您可能会尝试使类、接口或成员更容易访问。在某种程度上这是好的。为了测试一个公共类包的私有成员是可以接受的,但将可访问性提高到更高是不可接受的。换句话说,将类、接口或成员作为包导出API的一部分以促进测试是不可接受的。

  • 问题内容: 好了,所以我很久以来一直在某个问题上绊脚石,我想听听社区其他成员的意见。 首先,让我们看一些抽象控制器。 显然,我们在这里: 控制器的常规脚手架,并已注入一些服务 范围附带的一些字段和功能 私人方法 现在,我想在单元测试(Jasmine)中介绍此类。但是,问题是我想验证单击(调用)某项时该方法将被调用。我不知道该怎么做,因为在Jasmine测试中,我总是会收到错误,指出尚未定义模拟或未