2

こんにちは、 https ://developers.livechatinc.com/blog/testing-angular-2-apps-dependency-injection-and-components/ の手順に従って、サービスの単体テストを作成しようとしていますが、エラーが発生し続けます。

サービステストはこちら

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)

更新:「this」を使用しないと、「it」ステートメントで定義されていないというエラーが発生します

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'))");
  });

});
4

1 に答える 1

2

これは使用しないでください。ローカル変数を作成するだけthis.kibanaDataServices

let kibanaDataServices;

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

thisそして、参照するときにあなたのすべてを取り除きますkibanaDataServices

于 2016-09-20T04:40:05.277 に答える