2016-09-30 2 views
1

Я использую angular2.0 для моего приложениякомпонент тестирования, когда услуга вводится angular2.0

Я пытаюсь писать тесты для компонента, когда услуга впрыскивается

//component.ts

import { Component, OnInit } from '@angular/core'; 
import { FPService } from './shared/services/forgot-password.service'; 
import { CookieService } from 'angular2-cookie/core'; 

@Component({ 
    // moduleId: module.id, 
    selector: 'app-fp', 
    templateUrl: 'fp.component.html', 
    styleUrls: ['fp.component.css'], 
    providers: [FPService] 

}) 
export class FPComponent implements OnInit { 

    constructor(
    private cookie: CookieService, 
    private fpService: FPService 
) { } 

    ngOnInit() { 

    } 
    fnRequest(email) { 

    var oData = { "email": email }; 
    this.fpService.fnFPServie(oData) 
     .subscribe(
     data => { 
     console.log('success', data); 

     }, 
     error => { 
     console.log('error', error); 

     } 
    ); 
    } 

} 

мои spec.ts

import { FPComponent } from './forgot-password.component'; 


import { FPService } from './shared/services/forgot-password.service'; 
import { CookieService } from 'angular2-cookie/core'; 


class mockFPService { 
    fnFPServie(data) { 
     return {} 
    } 
} 

class mockCookieService { 
    getObject(name: string) { 
     return true; 
    } 
} 


let comp: FPComponent; 
let fixture: ComponentFixture<FPComponent>; 
describe('Component: FPComponent',() => { 
    beforeEach(() => { 
     TestBed.configureTestingModule({ 

      declarations: [FPComponent], 
      providers: [ 

       { provide: FPService, useClass: mockFPService }, 
       { provide: CookieService, useClass: mockCookieService }, 


      ] 
     }); 

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

    }); 

    it('should have method fnRequest',() => { 
     expect(comp.fnRequest('[email protected]')).toBeTruthy; 
    }); 

    it('should sent data to fnFpService() of FpService',() => { 

     comp.fnRequest('[email protected]'); 

     ************************************************** 
     how do inject the Fpservice and call fnFPServie ? 
     ******************************************************** 


    }); 


}); 

было бы полезно, если кто-нибудь подскажет, как издеваются впрыскивается Fpservice испытать функцию fnRequest()

Заранее спасибо

ответ

0

Это не достаточно просто добавить метод fnFPServie. Затем вызывающий абонент подписывается на возвращаемый наблюдаемый, вызывая subscribe. Как вы можете издеваться это просто сделать что-то вроде

class MockFPService { 
    error; 
    data; 
    fnFPServie(data) { 
    return this; 
    } 

    subscribe(next, err) { 
    if (next && !error) { 
     next(this.data) 
    } 
    if (err && this.error) { 
     err(this.error); 
    } 
    } 
} 

Здесь, вы только что вернулся сам сервис, который имеет свой собственный макет subscribe метод. Когда некоторые вызовы subscribe, они передают функции обратного вызова успеха и ошибки, и вы просто вызываете обратный вызов, проходящий в соответствующем ответе.

Вы также можете настроить макет во время теста либо с данными, либо с ошибкой. Таким образом, вы можете тестировать оба результата отдельно.

let mockFPService: MockFPService; 

beforeEach(() => { 
    mockFPService = new MockFPService(); 
    TestBed.configureTestingModule({ 
    providers: [ 
     { provide: MockFPService, useValue: mockFPService } 
    ] 
    }) 
}) 

it('..',() => { 
    mockFPService.data = 'some data'; 
}) 

it('..',() => { 
    mockFPService.error = 'some error'; 
}) 
Смежные вопросы