Angular 单元测试 - new Service() 和 Testbed.inject() 有什么区别?

Angular Unit Test - What is the difference between new Service() and Testbed.inject()?

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

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

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

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

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

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

If my tested service have constructor using another service or router, can I still use new Service()

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

It says you can use new Service when you won't call the constructor a subsequent time. Does that mean I can't call this service in other component's unit test (in same project) that provides this service in it's Testbed?

我认为他们的意思是,如果您需要为每个地方不断调用新服务,那么使用 Testbed 效率不高,而且最好在创建一个实例并每次都返回的地方使用它。