2017-02-04 8 views
5

unittestがunittestが完了したとみなされるときにunittestを明示的に制御するときにdone-callbackを渡す機能が気に入っています。 Angular 2を使用しているときに、これを依存性注入と組み合わせる方法を誰もが説明できますか?完了コールバックをインジェクション角2 unittestと組み合わせる方法unittest

もう少し背景:

はコールバック関数を有する通常のユニットテストは次のようになります

角度2フレームワークによって生成されたA unittestの注射を使用し、次のようになります

it('should be defined', inject([TxparserService], (service: TxparserService) => { 
    expect(service).toBeTruthy(); 
    })); 

私は、コールバック関数と依存関係注入の両方を使いたいと思います。それはどうやって見える?

答えて

6

できるかどうかわかりません。個人的には、私はいくつかの理由から、このスタイルの注射をやめました:1.それはかなり冗長であり、2.あなたはそれぞれのテストケースごとにそれを繰り返す必要があります。

  • まだ冗長であることの私の最初の懸念を壊すので、私はちょうどそれを今

    この方法を行う、上記beforeEach、私にとってbeforeEach

    let service: TxparserService; 
    
    beforeEach(() => { // configure }); 
    
    beforeEach(inject([TxperserverService], (svc: TxparserService) => { 
        service = svc; 
    })); 
    
  • を使用してください:カップル他のオプションがにあります

    let service: TxparserService; 
    
    beforeEach(() => { 
        TestBed.configureTestingModule({ 
         providers: [ TxparserService ] 
        }); 
    
        service = TestBed.get(TxparserService); 
    }); 
    
+0

答えはThxです。それは私のために働くことができるので、今私はそれを答えとしてマークします。 –

3

私は正常にfakeAsyncを組み合わせることができました注入する。だから、次のようになります。

it('should be defined', fakeAsync(inject([TxparserService], (service: TxparserService) => { 
    expect(service).toBeTruthy(); 
}))); 

あなたは注射でdoneスタイルの非同期テストを結合する必要がある場合には、単純に次の操作を行うことができますhttps://angular.io/guide/testing#the-fakeasync-function

+2

私は 'async'を使って同じように働いた。 –

6

で説明tick()機能とそれを組み合わせることができます。

it('should work', (done) => inject([SomeService], (someService: SomeService) => 
{ 
    expect(true).toEqual(true); 
    done(); 
})()); 

injectが返す関数をすぐに呼び出すようにしてください。

PS:たまにasyncfakeAsyncでもない作品とあなたはまだそれが古い学校のファッションにdoneする必要があります...

PPS:誰かがで観察の時間依存操作の問題を克服するためにどのように関心がある場合jasmine-marblesこの短い例を見てみましょう。marble-scheduler-injector.ts

+0

これは、https://github.com/angular/angular/issues/10127 – vivri

+0

@vivriと関連している可能性がありますが、最近は[jasmine-marbles](https://www.npmjs.com/package/)に切り替えました。 jasmine-marbles)、今では(少なくともObservablesのために)非同期型は必要ありません。 PS:それを動作させるためには、Jasmine-MarblesのTestSchedulerを時間に依存したObservable操作に注入する必要があります。 –

関連する問題