2016-06-14 51 views
7

我有一个Angular2,带有非常基本的Jasmine测试的TypeScript应用程序设置。我想测试一个管道。用Jasmine测试Angular2/TypeScript管道

lpad.pipe.ts

import {Pipe, PipeTransform} from '@angular/core'; 
@Pipe({ 
    name: 'lpad' 
}) 
export class LPadPipe implements PipeTransform { 
    transform(value: any, args: string[]): any { 
     let pad = args[0]; 
     return (pad + value).slice(-pad.length); 
    } 
} 

使用在HTML模板:

{{size.SizeCode | lpad:['0000']}} 

lpad.pipe.spec.ts - 我的测试(不工作)

import { LPadPipe } from './lpad.pipe'; 

describe('LPadPipe'),() => { 
    let pipe: LPadPipe; 

    beforeEach(() => { 
     pipe = new LPadPipe(); 
    }); 

    it('transforms "1" to "0001"',() => { 
     let value: any = "1"; 
     let args: string[] = ['0000']; 

     expect(pipe.transform(value, args)).ToEqual('0001') 
    }); 

} 

错误消息:

Error: TypeError: Cannot read property 'length' of undefined(…) 

我认为问题出在我测试的“价值”和“参数”上。任何想法如何解决?

回答

8

这是因为你的错误使用describe方法时:

describe('LPadPipe'),() => { // <---------------- 
    let pipe: LPadPipe; 

    beforeEach(() => { 
    pipe = new LPadPipe(); 
    }); 

    it('transforms "1" to "0001"',() => { 
    let value: any = "1"; 
    let args: string[] = ['0000']; 

    expect(pipe.transform(value, args)).ToEqual('0001') 
    }); 

} // <---------------- 

您应该使用,而不是执行以下操作:

describe('LPadPipe',() => { // <---------------- 
    let pipe: LPadPipe; 

    beforeEach(() => { 
    pipe = new LPadPipe(); 
    }); 

    it('transforms "1" to "0001"',() => { 
    let value: any = "1"; 
    let args: string[] = ['0000']; 

    expect(pipe.transform(value, args)).ToEqual('0001') 
    }); 

}); // <---------------- 
+3

你是100%正确的。谢谢。我还有另一个错字“ToEqual('0001')”应该是“toEqual('0001')”。它正在工作。 –

+0

+1这帮助我进行测试,并指出On Angular v4 +管道可以单独接收参数,如pipe.transform(value,arg1,arg2,arg3 ....) –