2013-04-10 13 views
5

Voglio unità di testare la mia funzione che costruisce in sostanza una serie di caratteristiche osservabili da un array di parametri (codice dattiloscritto):Controllare se l'estensione è stata applicata a osservabile

private BuildObservables(parameters: Parameter[]) { 
     var observables = {}; 

     for (var parameterName in parameters) { 

      var p = parameters[parameterName]; 

      // Build observable 
      observables[parameterName] = ko.observable(p.Value); 

      // Attach validation 
      if (p.IsRequired) { 
       observables[parameterName].extend({ required: true }); 
      } 
     } 
     return observables; 
    } 

mio aspetto test come questo:

var parameters = []; 

// new Parameter(int value, bool isRequired) 
parameters["Param1"] = new Parameter("123", true); 
parameters["Param2"] = new Parameter("456", false); 

var viewModel = BuildObservables(parameters); 

ok(viewModel["Param1"] != null); 
ok(viewModel["Param2"] != null); 

nel caso del primo parametro in cui isRequired è stato fissato a true, come verificare se l'estensione (validazione) è stato applicato ("Allega validazione" parte in BuildObservables)?

Modifica:

In altra funzione Sto attaccando gli abbonati e non so come verificare se sono stati attaccati in modo corretto.

risposta

1

Non conosco molto il plugin di convalida per il caso specifico, ma in termini più generali dubito che sia possibile scoprire se un osservabile è stato esteso, poiché il meccanismo di estensione è molto generale e non impone un operazione specifica da eseguire sull'osservatore "esteso", lasciando tutti i dettagli dell'operazione all'extender stesso (in modo che il risultato possa variare ampiamente, andando dall'avvolgere l'osservabile, sottoscrivendolo, anche semplicemente registrando l'osservabile in un servizio esterno o qualsiasi altra via di mezzo).

Se il problema è a scopo di test unità solo, si potrebbe considerare beffardo la funzione di estendere in modo che memorizza gli argomenti passati ad esso (cioè i estensori) sul osservabile esso è chiamato - in questo modo si potrebbe tardi controllare la presenza di detti estensori.

Per qualcosa di più elaborato, la libreria di test jasmine offrono più opzioni per prototipi, compresi i test per verificare se una particolare funzione è stata chiamata e se alcuni argomenti particolari sono stati passati ad esso, per cui si potrebbe essere interessante da guardare troppo.

3

Puoi chiamare rules() sul tuo osservabile, dovrebbe darti un array.

observables[parameterName].rules(); 
Problemi correlati