2017-11-14 3 views
1

私は実際のサービスで機能を使用していますが、ユニットテストケースでその機能をどのように注入できるかを知りたいと思います。以下はisDameDayはプロバイダではない関数です。この関数は実際のサービスでうまく動作しているので、どのようにテストケースに挿入できますか? isSameDay機能についてファンクションプロバイダを使用しない角2ユニットテストケース

import { LoggerService, isSameDay } from '../../../shared'; 

describe('NavBaseComponent',() => { 
    let component: NavBaseComponent; 
    let fixture: ComponentFixture<NavBaseComponent>; 

    beforeEach(() => { 
    TestBed.configureTestingModule({ 
     declarations: [NavBaseComponent], 
     providers: [ 
     LoggerService 
     ] 
    }) 
     .compileComponents(); 
    }); 

    beforeEach(() => { 
    fixture = TestBed.createComponent(NavBaseComponent); 
    component = fixture.componentInstance; 
    fixture.detectChanges(); 
    }); 

    it('should be created',() => { 
    expect(component).toBeTruthy(); 
    }); 
}); 

コードが

export function isSameDay(d1: Date, d2: Date): boolean { 
    return !!d1 && !!d2 && 
     d1.getDate() === d2.getDate() && 
     d1.getMonth() === d2.getMonth() && 
     d1.getFullYear() === d2.getFullYear(); 
}; 
+0

共有コードを追加できますか?それはプロバイダの中のメソッドなのでしょうか? – echonax

+0

多くの場所で使用されている機能です – Rohit

答えて

4

あなたはあるとして、あなたがそれをテストすることができ、どこでもそれを注入する必要はありません。

import { LoggerService, isSameDay } from '../../../shared'; 

describe.. 

    it('should test isSameDay',()=>{ 
     expect(isSameDay(new Date(), new Date())).toEqual(true); 
    }) 

.. 

ここplunkerの例です:http://plnkr.co/edit/TyTyaJvDD28AqPH2yDKa?p=preview

+0

私はisSameDayをテストしたくありません。これはマップ内で使用されます(date => isSameDay(date、new Date()))。テストケースがエラーを実行中に問題が発生しています:isSameDayは関数ではありません。テストケースはこの機能を認識していません。どうすれば修正できますか? – Rohit

+0

@Rohitプランナーを変更しました。問題が再現されているかどうか確認できますか? – echonax

+0

私は問題を持っています。モックサービスはマップの日付を返していませんでした(日付=> isSameDay(日付、新しい日付()))。それは問題を作り出していた文字列を返していた。御時間ありがとうございます。 – Rohit

0

私があなただったら、私は providers: [ {provide: UserService, useValue: userServiceStub } ]

のようなスタブサービスを使用すると、あなたはこの userService = fixture.debugElement.injector.get(UserService);またはuserService = TestBed.get(UserService);

のようにそれを得ることができます例:

TestBed.configureTestingModule({ 
    declarations: [ WelcomeComponent ], 
    providers: [ {provide: UserService, useValue: userServiceStub } ] 
    }); 

    fixture = TestBed.createComponent(WelcomeComponent); 
    comp = fixture.componentInstance; 

    // UserService from the root injector 
    userService = TestBed.get(UserService); 
    ... 
0

isSameDay関数をテストする必要がある場合は、サービスに変換して他のサービスと同じように扱うことができます。あなたのケースではLoggerServiceのように。

このアプローチの利点は、機能/サービスを単独でテストできることです。

コンポーネントテストを書くときには、いつでもこの新しいサービスコールをモックできます。ここでも、コンポーネントを単独でテストするのに役立ちます。

関連する問題