3

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かどうかをテストできました。pushspyOn

そのために、私はその部分に微妙な変更を加えました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);

}));
4

2 に答える 2

3

Unit Test クラスでこれを試してください。

beforeEachProviders(() => [WelcomePage, MenuController, provide(NavController, { useValue: WelcomePage })]);

その後:

import {provide} from '@angular/core';
于 2016-06-21T11:11:47.590 に答える