JasmineJS - Elementi fondamentali del test
In questo capitolo discuteremo gli elementi costitutivi del test di Jasmine.
Suite Block
Jasmine è un framework di test per JavaScript. Suiteè l'elemento costitutivo di base del framework Jasmine. La raccolta di casi di test di tipo simile scritti per un file o una funzione specifici è nota come una suite. Contiene altri due blocchi, uno è“Describe()” e un altro lo è “It()”.
Un blocco Suite può avere solo due parametri, uno “name of that suite” e un altro “Function declaration” che fa effettivamente una chiamata alla funzionalità della nostra unità che deve essere testata.
Nell'esempio seguente, creeremo una suite in cui verrà aggiunta la funzione di test unitario add.jsfile. In questo esempio, abbiamo il nostro file JS denominato“calculator.js” che verrà testato tramite Jasmine e il file delle specifiche di Jasmine corrispondente è “CalCulatorSpec.js”.
Calculator.js
window.Calculator = {
currentVal:0,
varAfterEachExmaple:0,
add:function (num1) {
this.currentVal += num1;
return this.currentVal;
},
addAny:function () {
var sum = this.currentVal;
for(var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
this.currentVal = sum;
Return this.currentVal;
},
};
CalCulatorSpec.js
describe("calculator",function() {
//test case: 1
it("Should retain the current value of all time", function () {
expect(Calculator.currentVal).toBeDefined();
expect(Calculator.currentVal).toEqual(0);
});
//test case: 2
it("should add numbers",function() {
expect(Calculator.add(5)).toEqual(5);
expect(Calculator.add(5)).toEqual(10);
});
//test case :3
it("Should add any number of numbers",function () {
expect(Calculator.addAny(1,2,3)).toEqual(6);
});
});
Nella funzione precedente, abbiamo dichiarato due funzioni. Funzioneadd aggiungerà due numeri dati come argomento a quella funzione e un'altra funzione addAny dovrebbe aggiungere qualsiasi numero dato come argomento.
Dopo aver creato questo file, dobbiamo aggiungere questo file “SpecRunner.html”all'interno della sezione testa. Se la compilazione è riuscita, questo genererà il seguente output come risultato.
Blocco di suite annidate
Il blocco di suite può avere molti blocchi di suite all'interno di un altro blocco di suite. L'esempio seguente ti mostrerà come creare un blocco di suite diverso all'interno di un altro blocco di suite. Creeremo due file JavaScript, uno denominato come“NestedSpec.js” e un altro chiamato come “nested.js”.
NestedSpec.js
describe("nested",function() {
// Starting of first suite block
// First block
describe("Retaining values ",function () {
//test case:1
it ("Should retain the current value of all time", function () {
expect(nested.currentVal).toBeDefined();
expect(nested.currentVal).toEqual(0);
});
}); //end of the suite block
//second suite block
describe("Adding single number ",function () {
//test case:2
it("should add numbers",function() {
expect(nested.add(5)).toEqual(5);
expect(nested.add(5)).toEqual(10);
});
}); //end of the suite block
//third suite block
describe("Adding Different Numbers",function () {
//test case:3
it("Should add any number of numbers",function() {
expect(nested.addAny(1,2,3)).toEqual(6);
});
}); //end of the suite block
});
Nested.js
window.nested = {
currentVal: 0,
add:function (num1) {
this.currentVal += num1;
return this.currentVal;
},
addAny:function () {
Var sum = this.currentVal;
for(var i = 0;i < arguments.length; i++) {
sum += arguments[i];
}
this.currentVal = sum;
return this.currentVal;
}
};
La parte di codice precedente genererà il seguente output come risultato dell'esecuzione specRunner.html file dopo aver aggiunto questo file all'interno della sezione head.
Descrivi Block
Come discusso in precedenza, descrivere il blocco è una parte del blocco Suite. Come il blocco Suite, contiene due parametri, uno“the name of the describe block” e un altro “function declaration”. Nei nostri prossimi esempi, esamineremo molti blocchi di descrizione per comprendere il flusso di lavoro del blocco della suite Jasmine. Di seguito è riportato un esempio di un blocco completo di descrizione.
describe("Adding single number ",function () {
it("should add numbers",function() {
expect(nested.add(5)).toEqual(5);
expect(nested.add(5)).toEqual(10);
});
}
Blocco IT
Come descrivere il blocco, siamo stati introdotti anche nel blocco IT. Va all'interno di un blocco di descrizione. Questo è il blocco che contiene effettivamente ogni caso di unit test. Nel codice seguente sono presenti parti diIT blocco dentro uno describe bloccare.
describe("Adding single number ",function () {
// test case : 1
it("should add numbers",function() {
expect(nested.add(5)).toEqual(5);
expect(nested.add(5)).toEqual(10);
});
//test case : 2
it("should add numbers",function() {
expect(nested.addAny(1,2,3)).toEqual(6);
});
}
Aspettatevi Block
Gelsomino Expectti consente di scrivere le tue aspettative dalla funzione richiesta o dal file JavaScript. Viene sottoITbloccare. Un blocco IT può avere più di un blocco Expect.
Di seguito è riportato un esempio di blocco Expect. Questo blocco prevede un'ampia varietà di metodi per testare l'unità della funzione JavaScript o del file JavaScript. Ciascuno dei blocchi Expect è anche noto comematcher. Esistono due diversi tipi di matcher, unoinbuilt matcher e un altro user defined matchers.
describe("Adding single number ",function () {
// test case : 1
it("should add numbers",function() {
expect(nested.add(5)).toEqual(5);
expect(nested.add(5)).toEqual(10);
});
//test case : 2
it("should add numbers",function() {
expect(nested.addAny(1,2,3)).toEqual(6);
});
}
Nei prossimi capitoli, discuteremo i vari usi dei diversi metodi integrati del blocco Expect.