繁体   English   中英

离子/角测试:this.storage.ready 不是一个函数

[英]Ionic/Angular testing: this.storage.ready is not a function

我正在尝试为我的 Angular 单元测试模拟 Ionic 的存储提供程序,但我被卡住了。 这是我的模拟:

export class StorageMock {
  driver: string;
  vals: {};

  constructor() {
    // super({})
  }

  clear() {
    return new Promise<void>((res) => res())
  }

  ready() {
    return new Promise<LocalForage>((res) => res())
  }

  get(key: string) {
    return new Promise((res) => res(this.vals[key]))
  }

  set(key, val) {
    return new Promise((res) => {
      this.vals[key] = val;
      res()
    })
  }

  remove(key) {
    return new Promise((res) => {
      delete this.vals[key];
      res()
    })
  }
}

我的测试是这样设置的:

describe('ReEvaluationComponent', () => {
  let component: ReEvaluationComponent;
  let fixture: ComponentFixture<ReEvaluationComponent>;
  let mockGlobalsService = jasmine.createSpyObj('GlobalsService', ['base_url'])
  let checkInsService: any;
  let injector: TestBed;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ ReEvaluationComponent ],
      imports: [
        IonicModule.forRoot(),
        HttpClientTestingModule,
        RouterTestingModule,
      ],
      providers: [
        CheckInsProvider,
        WeighInsProvider,
        PurchasesService,
        TransactionsProvider,
        {provide: Storage, useValue: StorageMock},
        {provide: GlobalsService, useValue: mockGlobalsService}
      ]
    }).compileComponents();

    fixture = TestBed.createComponent(ReEvaluationComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  }));

  ...

我认为这一行: {provide: Storage, useValue: StorageMock}可以解决这个问题,但我仍然收到错误消息:

Failed: this.storage.ready is not a function

我错过了什么?

请检查您是否正在导入相应的Storage并在构造函数中声明它。 因此,在检查之后,您可以像这样使用:

import { Storage } from '@ionic/storage-angular';

constructor(private storage: Storage) {
}

this.storage.ready();

他们用 create() 替换了 ready(),但在使用之前请阅读 v3 公告https://ionicframework.com/blog/annoucing-ionic-storage-v3/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM