【问题标题】:How to mock "localforage" in angular jasmine unit test cases如何在 Angular jasmine 单元测试用例中模拟“localforage”
【发布时间】:2019-09-29 09:12:08
【问题描述】:

我正在使用 localforage 将会话存储在客户端。我正在尝试为我的角度服务的方法编写单元测试用例,我如何存根或模拟 localforage。请帮忙。

我已经

import { Injectable } from ‘@angular/core’;
@Injectable()
export class TokenService {
  private TOKEN_KEY = ‘id_token’;
  constructor() { }
  setAccessToken(token: string) {
    localForage.setItem(this.TOKEN_KEY, token);
  }
  getAccessToken(): string {
    return localForage.getItem(this.TOKEN_KEY);
  }
}

我正在寻找不调用实际 localforage 方法的方法,因为我的目的不是测试库。非常感谢您的工作。

【问题讨论】:

    标签: angular unit-testing jasmine mocking localforage


    【解决方案1】:

    您可以将测试模块配置为在组件请求TockenService 时注入间谍对象。

    这可以通过在您的提供者定义[{ provide: TockenService, useValue: mockTokenService }] 中使用useValue 属性定义服务来完成。

    describe('YourComponent', () => {
      let component: YourComponent;
      let fixture: ComponentFixture<YourComponent>;
    
      let mockTokenService;
    
      beforeEach(async(() => {
        mockTokenService  = jasmine.createSpyObj(['setAccessToken', 'getAccessToken']);
    
        TestBed.configureTestingModule({
          declarations: [YourComponent],
          imports: [],
          providers: [{ provide: TockenService, useValue: mockTokenService  }]
        }).compileComponents();
      }));
    
      beforeEach(() => {
        fixture = TestBed.createComponent(YourComponent);
        component = fixture.componentInstance;
        fixture.detectChanges();
      });
    
      it('should create', () => {
        mockTokenService.getAccessToken.and.returnValue('YOURTOKENSTRING');
    
        expect(component).toBeTruthy();
      });
    
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多