![](/img/trans.png)
[英]Angular2 “No provider for Service!” error when provider is added @NgModule
[英]Invalid provider for the NgModule 'DynamicTestModule' when testing a service in Angular 2
我有以下服务:
import { Injectable } from '@angular/core';
import { MenuItem } from './../classes/menu-item';
import { ITEMS } from './../static-data/items-list';
@Injectable()
export class ItemsListService {
getItems(): Promise<MenuItem[]> {
return Promise.resolve(ITEMS);
}
}
此服务的测试在这里:
import { TestBed, async, inject } from '@angular/core/testing';
import { ItemListService } from './item-list.service';
import { MenuItem } from './../classes/menu-item';
import { ITEMS } from './../static-data/items-list';
describe('ItemListService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [ ItemListService, MenuItem, ITEMS ]
});
});
it('should ...', inject([ItemListService], (service: ItemListService) => {
expect(service).toBeTruthy();
}));
});
MenuItem 在这里定义:
export class MenuItem {
name: string;
link: string;
}
ITEMS 在这里定义: import { MenuItem } from './../classes/menu-item';
export var ITEMS: MenuItem[] = [
{name: 'Vehicles', link: '/vehicles'},
{name: 'Gateways', link: '/gateways'},
{name: 'Statuses', link: '/statuses'},
{name: 'Logs', link: '/logs'}
]
当我运行测试时,我在浏览器控制台中收到以下错误:
FAILED ItemListService should ...
和
那么为什么我会出现这些错误呢? 测试工作的解决方案是什么?
这是一个令人讨厌的错误,我想我会在你的规范中包含另一个微妙的原因。 在我的情况下,我指定了“提供者”而不是“提供”,如下所示
TestBed.configureTestingModule({
providers: [{provider: ApplicationActions, useClass: ActionMock}] // don't do that (missing 'provide')!
而不是提供有用的信息,比如“没有指定‘提供’键”,它只是简单地报告
失败:NgModule 'DynamicTestModule' 的提供者无效 - 仅允许提供者和类型的实例,得到:[?[object Object]?, ...]
顺便说一句,还介意在提供商中使用 class,而不是一些变量。 由于意外的问题更换/外壳,这发生在我身上:
TestBed.configureTestingModule({
// ...
providers: [ SomeService ]
}
代替...
TestBed.configureTestingModule({
// ...
providers: [ someService ]
}
请注意,如果您在测试中使用驼峰命名法变量 ( someService
),则它可能存在,这就是它不会引发语法错误的原因。
我有同样的问题,在我的Ionic Framework
项目中导入时是这样的:
import {Device} from '@ionic-native/device'
而不是:
import {Device} from '@ionic-native/device/ngx'
就我而言,我的提供程序行中有一个杂散逗号,导致DynamicTestModule
认为我传递了一个undefined
定义。
{
provide: ApiService,
useValue: {
getUsers: jasmine
.createSpy('getUsers')
.and.returnValue(of({ status: 200, body: [] })),
},
},
, // whoops!
MessageService,
{ provide: Location, useValue: { back: jasmine.createSpy('back') } },
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.