Ionic 2 NavController单元测试

时间:2017-02-01 01:32:50

标签: unit-testing angular ionic2

我对Angular 2和Ionic 2中的单元测试有点新意。

我正在尝试测试下面的login()方法

export class LoginPage {

  constructor(public navCtrl: NavController) {}

  login() {
    this.navCtrl.setRoot(TabsPage);
  }
}

进行以下测试

import { ComponentFixture, async } from '@angular/core/testing';
import { TestUtils } from '../../test';
import { LoginPage } from './login';
import { TabsPage } from '../tabs/tabs';

let fixture: ComponentFixture<LoginPage> = null;
let instance: any = null;

describe('Login Page', () => {

  beforeEach(async(() => TestUtils.beforeEachCompiler([LoginPage]).then(compiled => {
    fixture = compiled.fixture;
    instance = compiled.instance;
  })));

  it('changes root nav to TabsPage on login()', () => {
    spyOn(instance.navCtrl, 'setRoot');
    instance.login();
    expect(instance.navCtrl.setRoot).toHaveBeenCalledWith(TabsPage);
  });
});

但是我收到以下错误

Error: <spyOn> : setRoot() method does not exist

我跟着this tutorial进行了设置。

我一定错过了什么。 instance.navCtrl是正确的间谍活动吗?

1 个答案:

答案 0 :(得分:3)

它最终成了一个错字。我在提供中使用useValue而不是useClass,因此必须通过原型访问setRoot方法。

我有

{provide: NavController, useValue: NavMock}

而不是

{provide: NavController, useClass: NavMock}