Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在每台供应商不';不要注入服务_Angular_Angular2 Services - Fatal编程技术网

Angular 在每台供应商不';不要注入服务

Angular 在每台供应商不';不要注入服务,angular,angular2-services,Angular,Angular2 Services,我试图在Angular 2中测试我的组件,但是当组件的服务不在其提供程序中时,我遇到了问题 从'angular2/core'导入{Component}; 从“../../services/ServiceName”导入{ServiceName}; @组成部分({ 选择器:“组件名称”, 模板:` ` }) 导出类组件名称{ 构造函数(私有ServiceName:ServiceName){ } } 这是我的测试: 从“”导入{ComponentName}; 从“”导入{ServiceName};

我试图在Angular 2中测试我的组件,但是当组件的服务不在其提供程序中时,我遇到了问题

从'angular2/core'导入{Component};
从“../../services/ServiceName”导入{ServiceName};
@组成部分({
选择器:“组件名称”,
模板:`
`
})
导出类组件名称{
构造函数(私有ServiceName:ServiceName){
}
}
这是我的测试:

从“”导入{ComponentName};
从“”导入{ServiceName};
进口{
iit,
信息技术
抄写员,
描述,
期待,,
注射
注入异步,
TestComponentBuilder,
在每个供应商之前,
伪异步,
打上钩
setBaseTestProviders
}来自“angular2/测试”;
在每个提供程序之前(()=>[
服务名
]);
进口{
测试浏览器平台提供商,
测试\浏览器\应用程序\提供者
}来自“angular2/平台/测试/浏览器”;
setBaseTestProviders(测试浏览器平台提供商、测试浏览器应用提供商);
描述('ServiceName',()=>{
它('should have name property set',injectAsync([TestComponentBuilder],(tcb:TestComponentBuilder)=>{
返回tcb.createAsync(ComponentName)。然后((fixture)=>{
fixture.debugElement.componentInstance.isPanelActive=true;
fixture.detectChanges();
编译变量=fixture.debugElement.nativeElement;
expect(compiled.querySelector('a.yes')).toContext('Something');
});
}));
});
我得到的错误是:

 Failed: No provider for ServiceName! (ComponentName -> ServiceName)
Error: DI Exception
我尝试了overrideProvide方法,但它不起作用,还尝试在测试中创建TestComponent,并将提供程序与ComponentName指令一起传递到那里


有人知道吗?是否不可能通过引导文件引导服务,而不使用@Component中的提供程序?我认为这就是BeforeAchProviders的全部要点。

似乎在测试中,您需要明确定义注入器应该如何实例化给定的令牌。使用此函数:

beforeEachProviders(() => [
  provide(ServiceName, {useClass: ServiceName})
]);

解决了。这是System.js配置。它没有给出任何其他错误。因为有这么多的场景,我怀疑是在配置块中使用包造成的。我重新配置了我的业力并测试了以下主要文件:


谢谢

我遇到了同样的问题,并通过实现
提供
功能解决了这个问题:

beforeEachProviders(() => [
  return provide(ServiceName, {useClass: ServiceName})
]);

您需要确保
返回
提供程序,否则它无法识别。

您是否尝试将每个提供程序()之前的
移动到
description('xxx',(){…})
?是的,没有区别。
ServiceName
没有任何构造函数参数?ServiceName有一个构造函数。当然,问题是构造器是否有参数。您能否创建最小的可复制示例(例如github上的test repo)。因为对我来说,你的代码抛出了完全相同的错误,但是使用
provide
一切都很好,你能分享一下这个问题吗?我拥有你所拥有的一切,我有点不知所措。