mIve получил следующие модульные тесты, которые тестируют компонент, который я написал в Ionic 2. Модульные тесты дают ошибку из одной из ионных библиотек, я полагаю, что я не издеваюсь над ней или как такиеТестирование модуля Ionic 2 ViewController
import { ComponentFixture, async } from '@angular/core/testing';
import { TestUtils } from '../../test';
import {} from 'jasmine';
import { LocationSearchModal } from './LocationSearchModal';
import { LocationService } from '../../services/LocationService';
import { PouchDbService } from '../../services/common/PouchDbService';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { TestBed } from '@angular/core/testing';
import { App, MenuController, NavController, Platform, Config, Keyboard, Form, IonicModule, ViewController, GestureController, NavParams } from 'ionic-angular';
import { ConfigMock } from '../../mocks';
import { TranslateModule } from 'ng2-translate';
import { LoadingController } from 'ionic-angular';
let fixture: ComponentFixture<LocationSearchModal> = null;
let instance: any = null;
describe('LocationSearchModal',() => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
LocationSearchModal
],
providers: [
App, Platform, Form, Keyboard, MenuController, NavController, GestureController, LocationService, LoadingController,
{ provide: ViewController, useClass: class { ViewController = jasmine.createSpy("viewController"); } },
{ provide: NavParams, useClass: class { NavParams = jasmine.createSpy("navParams"); } },
{ provide: PouchDbService, useClass: class { PouchDbService = jasmine.createSpy("pouchDbService"); } },
{provide: Config, useClass: ConfigMock}
],
imports: [
FormsModule,
IonicModule,
ReactiveFormsModule,
TranslateModule.forRoot(),
],
})
.compileComponents()
.then(() => {
fixture = TestBed.createComponent(LocationSearchModal);
instance = fixture.debugElement.componentInstance;
fixture.autoDetectChanges(true);
});
}));
afterEach(() => {
fixture.destroy();
});
it('loads',() => {
expect(fixture).not.toBeNull();
expect(instance).not.toBeNull();
})
})
Это релевантная выдержка, которая использует ViewController из тестируемого компонента.
this.locationService.getLocationById(this.selectedLocation)
.subscribe((location: any) => {
this.viewController.dismiss(location.doc)
});
Тест терпит неудачу, и я получаю следующую трассировку стека
Chrome 53.0.2785 (Linux 0.0.0)
TypeError: viewCtrl._setHeader is not a function
at new Header (webpack:///home/milinda/workspaces/eclipse/inspection/addedinspection/Inspection-Upgrade/~/ionic-angular/components/toolbar/toolbar.js:14:0 <- src/test.ts:11833:30)
at new Wrapper_Header (/IonicModule/Header/wrapper.ngfactory.js:7:18)
Это связано с ViewController
линии, которую я создал жасмин шпион для
{ provide: ViewController, useClass: class { ViewController = jasmine.createSpy("viewController"); } },
После того, посмотрите на базу кода. Я нашел здесь метод _setHeader
Я также пробовал написать пользовательский провайдер, но получил ту же ошибку. Любая идея о том, что является правильным методом тестирования ViewController.
Кроме того, иногда после решения вопроса ViewController проблема может возникнуть из NavParams возможно
Из Wasotung также встроены в насмешки в ionic: import {mockApp, mockConfig, mockPlatform, mockView} из «ионно-угловых/устных/макет-провайдеров»; и использовать его как {предоставить: ViewController, useValue: mockView()}, – eesdil