简体   繁体   English

Angular 2 - 具有依赖性的angular-cli管道测试

[英]Angular 2 - angular-cli pipe test with dependencies

I'm trying to implement a test for a relatively isolated Pipe . 我正在尝试为相对隔离的Pipe实施测试。 I am using the latest version of angular-cli (with @angular 2.0.0). 我使用的是最新版本的angular-cli (带@angular 2.0.0)。

The pipe code is: 管道代码是:

import { Pipe, PipeTransform } from "@angular/core";
import { DatePipe, JsonPipe } from "@angular/common";

@Pipe({name: 'dataTableFormat'})
export class DataTablePipe implements PipeTransform {

  // values with type 'json' are parsed to json. As a result, string values may be displayed with quotes ("<string>").
  // To avoid that, we remove these quotes with this regex
  private quotesExp: RegExp = /^\"|\"$/gi;

  constructor(private datePipe: DatePipe, private jsonPipe: JsonPipe) {
  }

  transform(value: string, type: string): string {
    switch (type) {
        case "date":
            return this.datePipe.transform(value, 'short');
        case "json":
            return this.jsonPipe.transform(value).replace(this.quotesExp, "");
        default:
            return value;
    }
  }
}

and the spec code is: 和规范代码是:

import {TestBed} from "@angular/core/testing";
import {DataTablePipe} from "./data-table.pipe";
import {DatePipe, JsonPipe} from "@angular/common";

describe('DataTableFormat', () => {

    beforeEach(() => {
        TestBed.configureTestingModule({
            declarations: [ DataTablePipe ],
            providers: [
                DatePipe, JsonPipe
            ]
        });
    });

    it('sanity', () => {
        expect(true).toBeTruthy();
    });

    it('should transform ', () => {
        let fixture = TestBed.createComponent(DataTablePipe);
        let comp = fixture.componentInstance;
        let testDate:Date = new Date();
        let datePipe = fixture.debugElement.injector.get(DatePipe);

        expect(comp.transform(testDate.toString(), 'date')).toBe(datePipe.transform(testDate));

    });
});

sanity test passes, but the real test fails with the error: 完整性测试通过,但真正的测试失败并出现错误:

    Error: Cannot create the component DataTablePipe as it was not imported into the testing module!
    at TestBed.createComponent (webpack:///Users/sninio/dev/csp-ui-ng/~/@angular/core/bundles/core-testing.umd.js:1144:0 <- src/main/js/test.ts:6022:23)
    at Function.TestBed.createComponent (webpack:///Users/sninio/dev/csp-ui-ng/~/@angular/core/bundles/core-testing.umd.js:972:0 <- src/main/js/test.ts:5850:33)
    at Object.<anonymous> (webpack:///Users/sninio/dev/csp-ui-ng/src/main/js/app/pages/+platform/events/data-table/data-table.pipe.spec.ts:23:30 <- src/main/js/test.ts:14770:41)
    at ZoneDelegate.invoke (webpack:///Users/sninio/dev/csp-ui-ng/~/zone.js/dist/zone.js:203:0 <- src/main/js/test.ts:26741:28)
    at ProxyZoneSpec.onInvoke (webpack:///Users/sninio/dev/csp-ui-ng/~/zone.js/dist/proxy.js:72:0 <- src/main/js/test.ts:18285:39)
    at ZoneDelegate.invoke (webpack:///Users/sninio/dev/csp-ui-ng/~/zone.js/dist/zone.js:202:0 <- src/main/js/test.ts:26740:34)
    at Zone.run (webpack:///Users/sninio/dev/csp-ui-ng/~/zone.js/dist/zone.js:96:0 <- src/main/js/test.ts:26634:43)
    at Object.<anonymous> (webpack:///Users/sninio/dev/csp-ui-ng/~/zone.js/dist/jasmine-patch.js:91:27 <- src/main/js/test.ts:18021:50)

I'm sure it is some configuration that I missed, but for some reason the DataTablePipe is not imported into the testing module... 我确定这是我错过的一些配置,但由于某种原因, DataTablePipe没有导入测试模块......

Any ideas? 有任何想法吗?

TestBed.createComponent is strictly for creating components. TestBed.createComponent严格用于创建组件。 What you can do though is inject the DatePipe and JsonPipe into the test. 你可以做的是将DatePipeJsonPipe注入测试。 The just create you pipe from those 只是创建你的管道

import { inject } from '@angular/core/testing';

it('should transform ', inject([DatePipe, JsonPipe], (datePipe, jsonPipe) => {
  let pipe = new DataTablePipe(datePipe, jsonPipe);
  let testDate: Date = new Date();

  expect(pipe.transform(testDate.toString(), 'date'))
      .toBe(datePipe.transform(testDate, 'short'));
}));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM