2016-09-20 10 views
1

こんにちは私はこの手順に従って私のサービスのユニットテストを書こうとしています:https://developers.livechatinc.com/blog/testing-angular-2-apps-dependency-injection-and-components/しかし、私はエラーが発生し続けます。ここでAngular2テストサービス - 定義されていないサービス

は、サービス・テスト

import {it,inject,injectAsync,beforeEachProviders,TestComponentBuilder} from 'angular2/testing'; 
import {CORE_DIRECTIVES,FORM_DIRECTIVES,FormBuilder,ControlGroup,Validators,AbstractControl} from 'angular2/common'; 
import {KibanaDataServices} from "./kibana-data-services"; 
import {Http,Response,Headers, HTTP_PROVIDERS, ConnectionBackend} from 'angular2/http'; 
declare let $:JQueryStatic; 

describe('KibanaDataServices',() => { 
    beforeEach(function() { 
    this.kibanaDataServices = new KibanaDataServices() 

}); 


it("date properly formats for trends view",function(){ 
    // logs as {} 
    console.log("this is " + JSON.stringify(this)); 
    // logs as undefined 
    console.log("this.kibanaDataServices is " + this.kibanaDataServices); 

    let dateQuery: string = this.kibanaDataServices.formulateQueryDates("7d"); 
    expect(dateQuery).toEqual("(from:'now-7d',mode:quick,to:'now'))"); 
}); 

}); 

であり、このためにconsole.logは空のオブジェクトであり、そしてthis.kibanaDataServicesは単純に定義されていません。 kibana-data-servicesとkibana-data-services.spec.ts(このテストファイル)が同じフォルダにあるので、間違っているかどうかわからないので、私が指定しているパスは正しいです。

私は特に取得エラーです:

TypeError: Attempted to assign to readonly property. in /Users/project/config/spec-bundle.js (line 42836) 
TypeError: undefined is not an object (evaluating 'this.kibanaDataServices.formulateQueryDates') in /Users/project/config/spec-bundle.js (line 42841) 

UPDATE: は

describe('KibanaDataServices',() => { 

    beforeEach(function() { 
    kibanaDataServices = new KibanaDataServices() 

    }); 


    it("date properly formats for trends view",function(){ 
    console.log("kibanaDataServices is " + kibanaDataServices); 

     let dateQuery: string = kibanaDataServices.formulateQueryDates("7d"); 
     expect(dateQuery).toEqual("(from:'now-7d',mode:quick,to:'now'))"); 
    }); 

}); 

答えて

1

は使用しないでください「これは」「それは」文で定義されていないの誤差につながる使用していませんこのthis.kibanaDataServicesです。ただ、ローカル変数

let kibanaDataServices; 

beforeEach(() => { 
    kibanaDataServices = new KibanaDataServices() 
}); 

を作成し、取り除くすべてのあなたのthis

+0

kibanaDataServicesを参照しかし、私はbeforeEachでそれをどのように定義することができますし、「それ」の文でそれにアクセスします。私は厳密なモードになっているのでグローバルを作成できません – es3735746

+0

グローバルではありません。それを試してみてください。 'beforeEach'の直前に宣言してください。 –

+0

私は何を試みたのか、上記のアップデートに投稿しました。 – es3735746

関連する問題