单元测试茉莉花@NGRX/DATA
Posted
技术标签:
【中文标题】单元测试茉莉花@NGRX/DATA【英文标题】:UNIT TEST JASMINE @NGRX/DATA 【发布时间】:2020-11-25 11:19:08 【问题描述】:我正在尝试使用 @ngrx/data 为我的 Angular 项目编写单元测试!我收到错误
失败:模块“DynamicTestModule”导入了意外的值“EntityCollectionServiceBase”。请添加@NgModule 注解。
NullInjectorError: R3InjectorError(DynamicTestModule)[CalendarService -> EntityCollectionServiceElementsFactory -> EntityCollectionServiceElementsFactory]: NullInjectorError: 没有提供 EntityCollectionServiceElement
服务
import Injectable from '@angular/core';
import Observable from 'rxjs';
import Appointment from '../models/appointment';
import
EntityCollectionServiceBase,
EntityCollectionServiceElementsFactory
from '@ngrx/data';
@Injectable(
providedIn: 'root'
)
export class CalendarService extends EntityCollectionServiceBase<Appointment>
calendar$: Observable<Appointment>;
constructor(serviceElementsFactory: EntityCollectionServiceElementsFactory)
super('Appointment', serviceElementsFactory);
测试文件
import TestBed, async from '@angular/core/testing';
import StoreModule, Store from '@ngrx/store';
import CalendarService from './calendar.service';
import EntityDataModule from '@ngrx/data';
import entityConfig from '../entity-metadata';
import
EntityCollectionServiceBase,
EntityCollectionServiceElementsFactory
from '@ngrx/data';
describe('CalendarService', () =>
let service: CalendarService;
beforeEach(async(() =>
TestBed.configureTestingModule(
imports: [
StoreModule.forRoot(),
EntityCollectionServiceBase,
EntityCollectionServiceElementsFactory
],
declarations: [],
providers: [EntityDataModule.forRoot(entityConfig)]
).compileComponents();
service = TestBed.inject(CalendarService);
));
it('should be created', () =>
expect(service).toBeTruthy();
);
);
【问题讨论】:
将EntityCollectionServiceBase
和 EntityCollectionServiceElementsFactory
添加到提供者而不是导入中
并将EntityDataModule.forRoot(entityConfig)
移动到imports
数组中。
【参考方案1】:
这是我的设置
beforeEach(async () =>
await TestBed.configureTestingModule(
imports: [
StoreModule.forRoot(),
EffectsModule.forRoot([]),
EntityDataModule.forRoot(
entityMetadata
)
],
providers: [
MyService,
provide: EntityCacheEffects, useValue: ,
provide: EntityDataService, useValue: null
]
);
await TestBed.compileComponents();
);
【讨论】:
以上是关于单元测试茉莉花@NGRX/DATA的主要内容,如果未能解决你的问题,请参考以下文章
茉莉花匹配器功能未在 angularjs/karma 单元测试中加载