如何在Angular测试中模拟服务,该测试从ngx webstorage服务实现会话存储?
我在Angular6测试我的服务时遇到问题。此服务实现了我从“ngx webstorage service”库获得的会话存储。当用户点击另一个标签时,我用它来保存选择的产品。不幸的是,它不起作用。应该创建第一个测试不起作用的服务。我应该如何模拟服务并添加InjectionToken 我试图将模拟会话对象声明为StorageService,但Angular给了我一个错误。这是我第一次在测试中使用这个库 我的构造函数服务如下所示: 从“@angular/core”导入{Injectable,injection,InjectionToken}; 从“ngx Web存储服务”导入{StorageService}; const STORAGE_KEY='productId'; 导出常数我的产品服务存储= 新的InjectionToken“我的产品、服务和存储”; @注射的{ providedIn:'根' } 出口类产品服务{ productId:number[]=[]; constructor@InjectMY_PRODUCT_SERVICE_STORAGE专用存储:存储服务{ 常量ID:number[]=this.storage.getSTORAGE\u键; 如果ID的类型!=“未定义”{ this.productIds=ids; } } } 我的测试规范文件: 从'@angular/core/testing'导入{TestBed,inject}; 从“./PRODUCT.SERVICE”导入{ProductService,MY_PRODUCT_SERVICE_STORAGE}; 从“ngx webstorage服务”导入{StorageService,会话_STORAGE}; 描述“产品服务”,=>{ 让服务:产品服务; 常量mockSession={ 获取:=>, 设置:=>null, has:=>正确, 删除:=>null, 清除:=>null, withDefaultTranscoder:=>null }作为存储服务; beforeach=> service=TestBed.getProductService; TestBed.configureTestingModule{ 供应商:[ 产品服务, {提供:我的产品\服务\存储,使用现有:会话\存储} ] }; 它“应该被创建”,注入[mockSession],=>{ expectservice.toBeTruthy; }; }; 预期的输出是创建服务,但不幸的是,我从角度测试中获得了错误: 错误:StaticInjectorErrorDynamicTestModule[InjectionToken我的\u产品\u服务\u存储]: StaticInjectorErrorPlatform:core[InjectionToken我的\产品\服务\存储]: NullInjectorError:没有InjectionToken MY_PRODUCTS_SERVICE_STORAGE的提供程序 我已经替换了:如何在Angular测试中模拟服务,该测试从ngx webstorage服务实现会话存储?,angular,angular-test,Angular,Angular Test,我在Angular6测试我的服务时遇到问题。此服务实现了我从“ngx webstorage service”库获得的会话存储。当用户点击另一个标签时,我用它来保存选择的产品。不幸的是,它不起作用。应该创建第一个测试不起作用的服务。我应该如何模拟服务并添加InjectionToken 我试图将模拟会话对象声明为StorageService,但Angular给了我一个错误。这是我第一次在测试中使用这个库 我的构造函数服务如下所示: 从“@angular/core”导入{Injectable,inje
get: () => ''
致:
以及:
致:
以及:
致:
它终于起作用了。为了理解,会话存储是另一种注入令牌,不是吗?是的,它是,因为这个库的官方文档说:“在设计使用这个包的应用程序或库时,你必须记住一件事,就是要考虑依赖于StorageService接口的类的可重用性和可维护性。与其直接使用会话存储或本地存储注入令牌,不如引入您自己的注入令牌。“您是否尝试过为您自己的令牌提供实际的mockSession,而不是提供另一个令牌?是的,我尝试过,但仍然是相同的错误。”
get: () => []
useExisting: SESSION_STORAGE
useValue: mockSession
it('should be created', inject([mockSession], () => {
expect(service).toBeTruthy();
}));
it('should be created', () => {
expect(service).toBeTruthy();
});