如何在有角茉莉花单元测试用例中模拟“ localforage”

时间:2019-09-29 09:12:08

标签: angular unit-testing jasmine mocking localforage

我正在使用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方法的方法,因为我的目的不是测试该库。工作很受赞赏。

1 个答案:

答案 0 :(得分:0)

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

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

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

});
相关问题