Ho due domande:Test parametrizzati Qunit e derisione
Si possono avere test di unità parametrizzati in qunit?
Come si fa a scherzare con qunit ad es. prendendo in giro una chiamata getJSON
?
Grazie
Ho due domande:Test parametrizzati Qunit e derisione
Si possono avere test di unità parametrizzati in qunit?
Come si fa a scherzare con qunit ad es. prendendo in giro una chiamata getJSON
?
Grazie
Per beffardo richieste Ajax, si può provare qualcosa di simile ...
Ecco la funzione che si desidera prova:
var functionToTest = function() {
$.ajax({
url: 'someUrl',
type: 'POST',
dataType: 'json',
data: 'foo=1&foo=2&foo=3',
success: function (data) {
$('#main').html(data.someProp);
}
});
};
Ecco il banco di prova:
test('ajax mock test', function() {
var options = null;
jQuery.ajax = function (param) {
options = param;
};
functionToTest();
options.success({
someProp: 'bar'
});
same(options.data, 'foo=1&foo=2&foo=3');
same($('#main').html(), 'bar');
});
Si tratta essenzialmente di ignorare la funzione ajax di jQuery e quindi controlla quanto segue 2 cose: - il valore che è stato passato alla funzione ajax - richiama il callback successo e afferma che ha fatto quello che doveva fare
Vedi questo link per deridere la chiamata getJSON nei tuoi metodi di setup/teardown, http://www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=505
ho appena iniziato a utilizzare Sinon.JS, che permette beffardo di XMLHttpRequests e offre anche una semplice API finto-server. Davvero facile da usare! Offre anche l'integrazione con qunit.
Invece di eseguire l'override della funzione AJAX di jQuery, è possibile utilizzare anche il plugin jQuery Mockjax sviluppato da .appendTo. Questo plugin fa essenzialmente ciò che l'altra risposta suggerisce, ma consente un beffardo molto più sofisticato. Ad esempio, se avete la funzione di:
$.ajax({
url:"/api/user",
type:"GET",
dataType:"json",
data:'{"uid":"foobar"}',
success:function(data){
console.log("Success!");
},
error:function(data){
console.log("Error!");
}
});
Puoi prendere in giro con mockjax semplicemente chiamando la funzione mockjax, che è incluso automaticamente in jQuery:
$.mockjax({
url:"/api/user",
type:"GET",
response:function(requestData){
//handle the mock response in here
this.responseText = '{"fullname":"Mr. Foo Bar"}';
}
});
La seconda funzione beffardo può essere incluso in un file JavaScript esterno, dite "mocks.js" e l'unica altra cosa che deve essere fatta è includere la libreria mockjax (che può essere trovata in https://github.com/appendto/jquery-mockjax/). L'unica cosa da tenere a mente è che questo simula solo le chiamate jQuery ajax, non tutte le XMLHttpRequests. Se vuoi farlo, segui i consigli di @ bertvh e usa Sinon.js.
+1 all'utilizzo di mockjax. Ho appena iniziato a usarlo ed è abbastanza buono per i test unitari e per i dati fittizi per lo sviluppo dello schermo. L'unico problema che ho avuto è stato che i file di dati JSON venivano memorizzati nella cache dal browser Chrome. Cancellare la cache ha risolto eventuali problemi di file obsoleti. – Evildonald
C'è la mia implementazione di addon che permette di parametrizzare test qunit: https://github.com/AStepaniuk/qunit-parameterize
Appena testato, funziona come un fascino! – Johan
mi ci sono voluti circa mezz'ora per arrivare alla funzione (param) {opzioni = param;}, ma poi mi ha colpito .. . Veramente cool. –
Bello. Veramente bello. – StuperUser
Se stavate testando le chiamate annidate, queste opzioni sarebbero meglio conservate in un array e per ogni chiamata a .push() gli oggetti options a quell'array? – StuperUser