Ионное/угловое тестирование: this.storage.ready не является функцией

#angular #ionic-framework #karma-jasmine

Вопрос:

Я пытаюсь издеваться над поставщиком хранилища Ionic для своих модульных тестов Angular, но я застрял. Вот моя шутка:

 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
 

Что я упускаю?

Ответ №1:

Пожалуйста, проверьте, производите ли вы соответствующий импорт Storage и объявляете ли его в конструкторе. Итак, после проверки вы можете использовать его следующим образом:

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

constructor(private storage: Storage) {
}

this.storage.ready();
 

Ответ №2:

Они заменяют ready() на create() .

Ссылка: