【问题标题】:Injecting filter into unit test Angular Typescript将过滤器注入单元测试Angular Typescript
【发布时间】:2017-10-08 07:47:48
【问题描述】:

我在注入 Angular 内置 orderByFilter 时遇到问题。任何建议都会有所帮助。提前致谢!我收到此错误:

TypeError: undefined is not a constructor (evalating '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: "test1@test.com",
        },
        {
            Created: "2017-03-13",
            Email: "test2@test.com",
        },
    ]

    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("test2@test.com");
    });
});

【问题讨论】:

  • 我喜欢你的风格

标签: angularjs unit-testing typescript angularjs-filter


【解决方案1】:

角度 2 中没有“orderBy”管道。它们确实有其他管道,如货币、大写,但他们删除了 orderBy。 由于以前的 Angular 版本的性能问题,它们被删除了。

这是说明这一点的文档。 https://angular.io/docs/ts/latest/guide/pipes.html 阅读附录部分,了解更多相关信息。

【讨论】:

  • 我使用的是 Angular 1.5.7,所以'orderBy'应该仍然存在吧?
  • 对不起,我以为你是 Angular 2。我不确定答案。
  • 不用担心,我想这可能是因为我需要将控制器的初始化放在 beforeEach() 中,因为 Jasmine 是异步的
猜你喜欢
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
相关资源
最近更新 更多