NavController での単体テストに問題があります。
私はこのエラーで立ち往生しています:
「NavController」(?、?、?、?、?、?、?、?) のすべてのパラメーターを解決できません。すべてのパラメーターが Inject で装飾されているか、有効な型注釈があり、'NavController' が Injectable で装飾されていることを確認してください。
「@Inject」を使用するなど、ネットで見つけたすべてを試しましたが、何も機能しないようです。
コードは次のとおりです。
成分
import {Page, MenuController, NavController} from 'ionic-angular';
import {SignupPage} from '../signup/signup';
@Page({
templateUrl: 'build/pages/welcome/welcome.html'
})
export class WelcomePage {
// Variables
constructor(private menu: MenuController, private nav: NavController) {
this.menu.enable(false);
}
goToSignupPage() {
this.nav.push(SignupPage)
}
}
単体テスト
import {beforeEachProviders, it, describe, expect, inject} from '@angular/core/testing';
import {MenuController, NavController} from 'ionic-angular';
import {WelcomePage} from './welcome';
describe('WelcomePage', () => {
beforeEachProviders(() => [WelcomePage, MenuController, NavController]);
it('should have the menu disabled on instatiation', inject([WelcomePage], (welcomePage) => {
// Expectations
expect(welcomePage.menu.isEnabled()).toBeFalsy();
}));
});
何が問題なのですか?
アップデート:
返信ありがとうございます。
やり方がわかって本当に助かりました。
は使用しませんでしたが、Jasmine からを使用して が呼び出されたsinon
かどうかをテストできました。push
spyOn
そのために、私はその部分に微妙な変更を加えましたprovide
:
beforeEachProviders(() => [WelcomePage, MenuController,
{ provide: NavController, useValue: {push: NavController.prototype.push} }]);
NavController.prototype
(おそらく、他のすべてのプロパティにアクセスできるように を直接提供するとよいでしょう。)
そして、次のようにテストしました:
it('should go to signup page when calling goToSignupPage()',
inject([WelcomePage], (welcomePage) => {
// Spies
spyOn(welcomePage.nav, 'push').and.stub();
// Call
welcomePage.goToSignupPage();
// Expectations
expect(welcomePage.nav.push).toHaveBeenCalledWith(SignupPage);
}));