【问题标题】:Angular Unit Test - What is the difference between new Service() and Testbed.inject()?Angular 单元测试 - new Service() 和 Testbed.inject() 有什么区别?
【发布时间】:2021-08-26 14:29:40
【问题描述】:

在 Angular 的网站上,我们可以看到两种编写 Service 单元测试的方法。

首先是通过new Service实例化服务。

let service: ValueService; beforeEach(() => { service = new ValueService(); });

其次,通过TestBed实例化服务。

beforeEach(() => {
    TestBed.configureTestingModule({ providers: [ValueService] });
    service = TestBed.inject(ValueService);
});

谁能告诉我这两种方法有什么区别,什么时候应该和不应该使用它们,非常感谢!

【问题讨论】:

  • 不完全,我还有一些问题: 1. 如果我测试的服务有使用其他服务或路由器的构造函数,我还可以使用 new Service() 吗? 2.它说你可以在以后不调用构造函数时使用new Service。这是否意味着我不能在其他组件的单元测试(在同一个项目中)中调用此服务,而在它的 Testbed 中提供此服务?

标签: angular unit-testing karma-jasmine angular-unit-test


【解决方案1】:

如果我测试的服务有使用其他服务或路由器的构造函数,我还可以使用 new Service()

在这种情况下,您还将创建其他服务并将其传递给构造函数。您可以手动连接它,而不是使用角度依赖管理。

它说你可以在以后不调用构造函数时使用 new Service。这是否意味着我不能在其他组件的单元测试(在同一个项目中)中调用此服务,而在它的 Testbed 中提供此服务?

我认为它们只是意味着,如果您需要为每个地方继续调用新服务,那么使用创建一个实例并每次都返回它的 Testbed 效率不高且更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-08
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 2011-07-18
    • 2011-11-22
    相关资源
    最近更新 更多