2017-11-27 23 views
0

私はAngular 2アプリケーションを持っています。私はユニットテストにカルマとジャスミンを使用しています。 テストを実行しているときに次のエラーが発生します。 "エラー:トークン変換のプロバイダがありません!"それは誤っているものと同様の任意のサービス又はモジュールを設ける必要がない角度2ユニットテスト - 「トークン変換のプロバイダがありません」エラー

constructor(private _ccmApiService: CcmApiService, 
      private _usersService: UsersService, 
      private _foldersService: FoldersService, 
      private _hubService: HubService, 
      private _router: Router, 
      private _navigationService: NavigationService, 
      private _translate: TranslateService, 
      private _busyLoaderService: BusyLoaderService, 
      private _infoModal: InfoModal) { 

}

これは、コンポーネントコンストラクタ(これはアプリケーションコンポーネントの)です。

アイデア?

感謝:)

答えて

0

あなたの注入されたサービスの一つは、あなたのテスト領域に設けられていない他のサービス(トークン翻訳)を注入されているので、それはおそらくです。あなたはこれらの注射のすべてをスタブしましたか?コンポーネントをユニットテストするときは、注入をスタブすることを強くお勧めします。そうしないと、すべてのコンポーネントを一緒にテストしています。

let someServiceStub= {...}; 
let otherServiceStub= {...}; 

beforeEach(() => { 
     TestBed.configureTestingModule({ 
      imports: [ 
       ... 
      ], 
      declarations: [ 
       ... 
      ], 
      providers: [ 
       // override providers from other components and modules 
       {provide: SomeService, useValue: otherServiceStub}, 
      ] 
     }) 
     // Override component's own provider 
      .overrideComponent(MyComponent, { 
       set: { 
        providers: [ 
         {provide: OtherService, useValue: someServiceStub } 
        ] 
       } 
      }); 
    } 
); 
+0

しかし、私はスパイを使うのが好きですか?このハッスルを通過することなく私はできるはずですか? +クラス名はいつから2ワードになりますか?そして最後のことはちょうど明白です。これはアプリコンポーネントのコンストラクタです。これはアプリが初期化中であることを確認するためのものです。 – user1531186

+0

スパイについては、docsのテストguidでわかるように、これは次のように動作します: "この設定はwelcome.component.specの設定と似ていますが、スタブされたサービスオブジェクトを作成するのではなく、テストモジュールプロバイダを参照)、重要なgetQuoteメソッドをジャスミンスパイに置き換えます。そのサービスの注射も提供する必要があります。 – GHB

+0

"Token translations"という名前についても、OpaqueToken(angular2)やInjectionToken(angular4)の使用に関係していると思われます。これはエラー内にクラス名の前に "Token"という単語を置きます。私たちは、エラーの原因を見つけるために、他のサービスからコードをチェックしなければなりません(私はおそらくTranslateServiceを知らない)。しかし、あなたがそれらのいずれかを変更するたびにAppComponentのテストで別の新しいエラーが発生する可能性があるので、より良い方法はあなたのすべてのサービスをスタブするだろうと思う... – GHB

関連する問題