【问题标题】:Angular 2 - angular-cli pipe test with dependenciesAngular 2 - 具有依赖关系的 angular-cli 管道测试
【发布时间】:2016-09-21 10:52:01
【问题描述】:

我正在尝试对相对孤立的Pipe 进行测试。我正在使用最新版本的angular-cli(带有@angular 2.0.0)。

管道代码为:

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;
    }
  }
}

规范代码为:

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));

    });
});

健全性测试通过,但真正的测试失败并出现错误:

    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)

我确定这是我错过的一些配置,但由于某种原因,DataTablePipe 没有导入到测试模块中...

有什么想法吗?

【问题讨论】:

    标签: angular karma-jasmine angular2-testing


    【解决方案1】:

    TestBed.createComponent 严格用于创建组件。您可以做的是将DatePipeJsonPipe 注入到测试中。只需从这些管道中创建您的管道

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

    【讨论】:

    • 这不起作用,我收到缺少提供程序的错误:错误:没有 DatePipe 的提供程序!在 src/main/js/test.ts
    • 我在测试时工作得很好。我使用了您发布的确切代码。我刚刚从TestBed 中删除了declarations。除此之外,一切都一样,除了我在答案中发布的内容
    • 你用 angular-cli 测试过吗?我确定这是我缺少的一些配置
    • 不,我使用的是 angularclass webpack starter。不确定这是否会有所作为。我不明白为什么这个简单的案例会这样
    • 那么你知道什么???当我将 karma.conf 切换为使用 Chrome 而不是 PhantomJS 它现在可以工作了!
    猜你喜欢
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 2017-10-25
    • 2016-10-26
    • 2017-01-05
    • 1970-01-01
    相关资源
    最近更新 更多