2017-05-09 6 views
0

Angular組み込みorderByFilterを注入できません。どんな提案も役に立ちます。前もって感謝します!私はこのエラーを取得しています:ここでユニットテストにフィルターを注入する角度Typescript

TypeError: undefined is not a constructor (evaluating 'this.orderBy(this.registrationList, this.registrationSort, this.sortReverse)

は私のコンポーネントである:ここでは

import { RegistrationModel } from "../models/RegistrationModel"; 
import { IRegistration } from "../../../services/interfaces/IRegistration"; 

export class RegistrationsComponent implements ng.IComponentOptions { 
    public static componentName = "registrations"; 
    public template: string = require("./Registrations"); 
    public controller = RegistrationsController; 
} 

export class RegistrationsController { 
    static $inject = ["RegistrationModel", "orderByFilter"]; 
    public registrationsList: IRegistration[] = []; 
    public registrationSort: string; 
    public sortReverse: boolean = false; 

    constructor(
     public RegistrationModel: RegistrationModel, 
     public orderBy 
    ) {} 

    public sortRegistrations() { 
     this.registrationsList = this.orderBy(this.registrationsList, this.registrationSort, this.sortReverse); 
    } 
} 

は私のユニットテストです:

import "angular-mocks"; 
import { RegistrationsComponent, RegistrationsController } from "./RegistrationsComponent"; 
import { IRegistration } from "../../../services/interfaces/IRegistration"; 

describe("Registrations",() => { 
    var registrationModelMock = {}; 
    var orderBy; 

    beforeEach(angular.mock.module("onboardingTestApp", ($provide: any) => { 
     $provide.service("RegistrationModel",() => registrationModelMock); 
     $provide.service("orderByFilter",() => orderBy); 
    })); 

    var registrationList = [ 
     { 
      Created: "2016-05-13", 
      Email: "[email protected]", 
     }, 
     { 
      Created: "2017-03-13", 
      Email: "[email protected]", 
     }, 
    ] 

    var registrationController = new RegistrationsController(<any>registrationModelMock, orderBy); 

    it("should sort the registrations",() => { 
     registrationController.registrationsList = <any>registrationList; 
     registrationController.registrationSort = "Email"; 
     registrationController.sortReverse = true; 

     registrationController.sortRegistrations(); 

     expect(registrationList[0].Email).toBe("[email protected]"); 
    }); 
}); 
+0

私はあなたのスタイルが好きです – Martin

答えて

0

NO 'はありませんorderBy 'パイプを彼らは通貨、大文字のような他のパイプを持っていますが、彼らはorderByを削除しました。 以前の角度バージョンのパフォーマンスの問題のために削除されました。

これは、次のとおりです。 https://angular.io/docs/ts/latest/guide/pipes.html これについてもっと詳しく説明する付録の部分を読んでください。

+0

私は角度1.5.7を使用していますので、 'orderBy'はまだそこにいるはずですか? – Ron

+0

私はあなたが角度2であると思って申し訳なく思っています。私は答えがわかりません。 – prashanth

+0

Jasmineは非同期であるため、beforeEach()でコントローラの初期化を行う必要があるため心配はありません。 – Ron