Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.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测试中模拟服务,该测试从ngx webstorage服务实现会话存储?_Angular_Angular Test - Fatal编程技术网

如何在Angular测试中模拟服务,该测试从ngx webstorage服务实现会话存储?

如何在Angular测试中模拟服务,该测试从ngx webstorage服务实现会话存储?,angular,angular-test,Angular,Angular Test,我在Angular6测试我的服务时遇到问题。此服务实现了我从“ngx webstorage service”库获得的会话存储。当用户点击另一个标签时,我用它来保存选择的产品。不幸的是,它不起作用。应该创建第一个测试不起作用的服务。我应该如何模拟服务并添加InjectionToken 我试图将模拟会话对象声明为StorageService,但Angular给了我一个错误。这是我第一次在测试中使用这个库 我的构造函数服务如下所示: 从“@angular/core”导入{Injectable,inje

我在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的提供程序

我已经替换了:

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();
  });