2016-08-24 2 views
1

Ich habe eine Anwendung auf Typoskript mit Decorators für einige Convenience-Eigenschaften Zuweisungen gebaut und frage mich, wie ich über Unit Unit Tests für sie gehen kann.Unit Tests Typescript Decorators

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

In einer spec Klasse I, haben

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

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

Antwort

0

Da Dekorateure sind nur Funktionen, die ich gerade sie wie jede andere Funktion vorschlagen würde, testen. Und nur, wenn Sie wirklich brauchen, um, einen Test hinzufügen, das zeigt, wie den Dekorateur zu verwenden, mit einer Klasse/Mitglied/...

Hier ist ein Beispiel solchen Test aussehen könnte:

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

irgendwelche Beispiele für den obigen Fall, wo es Parameter nimmt und eine Funktion zurückgibt? – Rjk

+0

kann ich nicht folgen? Möchten Sie einen Test für den oben genannten Dekorateur sehen? Übrigens funktioniert Ihre Testspezifikation nicht, da TypeScript keine Decorators für Variablen unterstützt. Dies entspricht dem offiziellen Entwurf der Spezifikation. –

+0

Hi @ sebastian-sebald, Ja, ich würde gerne einen Test für den oben genannten Dekorateur sehen und mir ist bewusst, dass meine Spezifikation nicht funktioniert. – Rjk