2017-08-22 9 views
1

私は角4を学んでいます。私のアプリの仕事はうまくいますが、私はUnitTestにコンポーネントを知りたいと思います。未定義のプロパティ ''を読み取ることができません角度4ユニットテスト

import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 
import {CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA } from '@angular/core'; 
import { Http,ConnectionBackend,BaseRequestOptions } from '@angular/http'; 
import {MockBackend} from '@angular/http/testing'; 

import {DxSchedulerModule, DxCheckBoxModule, DxSelectBoxModule} from 'devextreme-angular'; 

import { CalendrierComponent } from './calendrier.component'; 
import {CalendrierModule} from './calendrier.module'; 

import {Person} from '../models/persons.model' 
import {PersonsService} from '../services/persons.services' 

import {Appointment} from '../models/appointment.model' 
import {AppointmentService} from '../services/appointment.service' 

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

    let personService:PersonsService; 
    let appointmentService:AppointmentService; 


    beforeEach(async(() => { 
    TestBed.configureTestingModule({ 
     declarations: [ CalendrierComponent], 
     imports:[DxSchedulerModule, DxCheckBoxModule, DxSelectBoxModule], 
     providers: [AppointmentService, 
     PersonsService, 
     MockBackend, 
     BaseRequestOptions, 
     { provide: Http, 
      useFactory: (backend: ConnectionBackend, 
         defaultOptions: BaseRequestOptions) => { 
         return new Http(backend, defaultOptions); 
         }, deps: [MockBackend, BaseRequestOptions] }, 
     ], 
     schemas:[NO_ERRORS_SCHEMA] 
    }) 
    .compileComponents(); 
    })); 

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

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

    it('should have a defined component',() => { 
    expect(component).toBeDefined(); 
    }); 

    it('add30mnto should return an hour with 30min more',() => { 
    expect(appointmentService.add30mnTo('2017-08-16T12:30:00.000Z')).toEqual('2017-08-16T13:00:00.000Z'); 
    }); 

、ここでは、私がテストしたいサービスがある::私が何をやったかここだ

import { Injectable } from '@angular/core'; 
import { Http, Response } from '@angular/http'; 
import 'rxjs/add/operator/toPromise'; 
import 'rxjs/add/operator/map'; 
import {Observable} from 'rxjs/Rx'; 
import { Appointment } from '../models/appointment.model'; 
import {PersonsService} from './persons.services' 

@Injectable() 
export class AppointmentService { 

private AppointmentUrlGet = 'http://localhost/v0/croissants'; 
private AppointmentUrlWrite = 'http://localhost/v0/croissant'; 


public handleError(error: any): Promise<any> { 
    console.error('An error occurred', error); // for demo purposes only 
    return Promise.reject(error.message || error); 
} 

    constructor(private http: Http, private personsService: PersonsService) {} 


    add30mnTo(date : string){ 
    var initialdate = (this.datetotimestamp(date) + 1800) * 1000; 
    var dateinit = new Date (initialdate) 
    var result = dateinit.toISOString(); 
    return result; 
    } 
. 
. 
. 
. 
} 

(例えばConnectionBackend)多くの問題を持った後、私はこのエラーがありますすることはできません未定義の 'add30mnTo'プロパティを読み込みます。誰もが私が間違っていたきたかのアイデアを持っていました... Jasmine angular unit test 'Cannot read 'property' of undefined Angular 2 Unit Testing - Cannot read property 'root' of undefined

が、解決策は、私のために動作しません。論文:

は、私はすでに、これらのトピックをチェックしましたか?ありがとう!!

+0

それは '(appointmentService.add30mnTo( '2017-08-16T12:30:00.000Z'))期待して、このラインから来るかもしれtoEqual( '2017。 -08-16T13:00:00.000Z '); }); 'それは' appointmentService'が定義されていないことを意味します – Nolyurn

+0

これは私の考えでありましたが、私の仕様ではapointmentServiceを定義しています... import {AppointmentService} '../services/appointment.service'この行に「let appointmentService:AppointmentService;」という行を追加しました記述部分に...私はそれがコンポーネントのCLIによって生成されたものを模倣しました... – moonshine

+0

あなたは 'new 'オペレータ – Nolyurn

答えて

1

この場合、appointmentServiceは定義も作成もされません。単に変数let appointmentService:AppointmentService;を宣言してもインスタンス化されません。あなたは、サービスを注入してみてくださいではなく、インスタンスを作成することができます。

// Add too imports : 
import { inject } from '@angular/core/testing'; 

//... In your describe function : 
it('add30mnto should return an hour with 30min more', inject([AppointmentService], (appointmentService:AppointmentService) => { 
    expect(appointmentService.add30mnTo('2017-08-16T12:30:00.000Z')).toEqual('2017-08-16T13:00:00.000Z'); 
})); 
+0

で' appointmentService'変数を初期化する必要があるかもしれません!あなたはコンポーネントのメソッドとどのようにやりとりすることができるか考えましたか?たとえば、component.toggleMonth()を実行したときに、動作しませんでした。私は厳密に同じエラーを持っています... – moonshine

+0

あなたの以前のテストが合格している場合、 'component'を定義する必要があります。確かに知るには十分な情報ではありません。おそらくテストで別の質問を開き、コンポーネントメソッド 'toggleMonth'を組み込んでいます。 – Corey

関連する問題