2016-08-24 85 views
1

我有一个应用程序构建在装饰器上用于一些便利的属性分配,并想知道如何去为它们编写单元测试。单元测试打字稿装饰

export function APIUrl() { 
     return function (target: any, key: string) { 
      let _value = target[key]; 

      function getter() { 
      return _value; 
      } 

      function setter(newValue) { 
      _value = getApiURL(); 
      } 

      if (delete target[key]) { 
      Object.defineProperty(target, key, { 
       get: getter, 
       set: setter 
      }); 
      } 
     }; 
    } 

在一个规范类无我有,

it("should return url string",()=> { 
    @APIUrl(); 
    let baseURL:string; 

    expect(baseURL typeOf string).toBe(true) 
}) 

回答

0

由于装饰只是功能我会建议只是测试他们像任何其他功能。只有当你真的需要,添加一个测试,演示了如何使用装饰带班/成员/ ...

下面是一个例子这样的测试可能看起来像:

import test from 'ava'; 
import { APIUrl } from './path'; 

const decorate = new APIUrl(); 

test.before(t => { 
    let obj = { someProp: 'foo' }; 
    decorate(obj, 'someProp'); 
    t.context.foo = obj; 
}); 

test('should return original value', t => { 
    t.is(t.context.foo.someProp, 'foo'); 
}); 
+0

任何实例对于上述情况,它需要参数并返回一个函数? – Rjk

+0

我不能相当遵循?你想看看上述装饰者的测试吗?顺便说一句你的测试规范不起作用,因为TypeScript不支持变量上的装饰器。这符合官方的草案规范。 –

+0

Hi @ sebastian-sebald,是的,我想看看上面的装饰器测试,我知道我的规范不起作用。 – Rjk