可能是这个新功能的副作用,但如果我有一个服务
@Injectable({
providedIn: 'root'
})
export class MyService {...}
我有MyComponent
使用它。现在,当我对该组件进行测试时,我只是这样做而且它有效!
TestBed.configureTestingModule({
declarations: [ MyComponent ]
})
.compileComponents();
这意味着我提供了隐式服务。我认为这是非常危险的测试行为。是否可以阻止此自动提供?
答案 0 :(得分:0)
我遇到了这个问题,并做了一些研究。文章的简短答案:
在
providedIn
中注册的所有服务都没有加载到测试中,它们只有在确实需要时才被延迟实例化。
参考:https://blog.ninja-squad.com/2018/05/04/what-is-new-angular-6/
答案 1 :(得分:-1)
使用旧语法:
@Injectable()
export class MyService {...}
并将服务注入根模块或相应模块的providers数组中。
如果您使用此方法,您将无法使用新功能:树木可移动的提供商。
答案 2 :(得分:-1)
在您的情况下使用Testbed.overrideProvider
/* Tomcat Dark Theme - Jerome E. Carter, II - Datatribe Softwers, Ltd. cc 2018 */
body, table
{
background-color: #555555!important;
}
button, input
{
background-color: #333333!important;
border: 1px solid white!important;
border-radius: 5px;
color: #ffaa00;
}
/*not working as intended - hope to improve later*/
input[type=button]:hover
{
background-color: #777777;
}
td
{
background-color: #777777!important;
}
*
{
color: white;
}
a
{
color: #ffaa00;
}
tr:hover
{
border-color: #aaaaaa!important;
}
答案 3 :(得分:-2)
这是按预期工作的,因为您启动了根服务范围(应用程序范围)。如果您不想这样,您仍然可以在组件级别启动它,如:
@Component({
selector: 'app-villains-list',
templateUrl: './villains-list.component.html',
providers: [ MyService ]
})
此方法要求您从服务中删除providedIn标志,如Pavan Shukla所说。
第二种可能性是在模块范围内设置范围,如下所示:
@Injectable({
providedIn: MyModule,
})
了解更多信息,请阅读: https://angular.io/guide/hierarchical-dependency-injection
干杯