我对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
是正确的间谍活动吗?
答案 0 :(得分:3)
它最终成了一个错字。我在提供中使用useValue
而不是useClass
,因此必须通过原型访问setRoot方法。
我有
{provide: NavController, useValue: NavMock}
而不是
{provide: NavController, useClass: NavMock}