Ich muss einen Dienst mit lokalen Variablen testen einige Methoden, die lokale Variablen nicht verwenden, übergeben OK, aber einige von ihnen fallen, da die Variable in Dienstbereich nicht definiert ist. Hier ist mein Code:Testen von Winkeldienst mit Jasmine
(function() {
'use strict';
angular.module('app').service('CalculatorService', CalculatorService);
function CalculatorService() {
return {
insertValue : insertValue,
equals : equals,
eraseNumber : eraseNumber,
makeOperation : makeOperation
}
var prevValue = 0;
var operation = '';
var nextNumber = false;
function insertValue(digit, display) {
console.log("prevValue is: " + prevValue);
if (display === 0 || nextNumber) {
prevValue = display;
display = digit;
nextNumber = false;
} else {
display = display + '' + digit;
}
return display;
}
function equals(display,direct) {
if (operation === 'plus') {
display = parseInt(prevValue) + parseInt(display);
}
if (operation === 'minus') {
display = prevValue - display;
}
if (operation === 'mult') {
display = prevValue * display;
}
if (operation === 'divide') {
if (display === 0) {
display = 'Divide by 0';
}else{
display = prevValue/display;
}
}
nextNumber = true;
prevValue = display;
if(direct){
operation='';
}
return display;
}
function makeOperation(val, display) {
var firstTime = (operation==='' || operation===undefined);
var result = equals(display,false)
operation = val;
nextNumber = true;
if(firstTime){
return display;
}else{
return result;
}
}
function eraseNumber(display) {
display = 0;
operation = '';
return display;
}
}
})();
und dies ist mein Test:
(function(){
'use strict';
describe('Service: CalculatorService', function() {
beforeEach(module('app'));
var mockDisplay = 0;
it('should change display from 0 to 5', inject(function(CalculatorService) {
mockDisplay = CalculatorService.insertValue(5,mockDisplay);
expect(parseInt(mockDisplay)).toEqual(5);
}));
it('should change display from 5 to 55', inject(function(CalculatorService) {
mockDisplay = CalculatorService.insertValue(5,mockDisplay);
expect(parseInt(mockDisplay)).toEqual(55);
}));
it('should not change display (55)', inject(function(CalculatorService) {
mockDisplay = CalculatorService.makeOperation('divide',mockDisplay);
expect(parseInt(mockDisplay)).toEqual(55);
}));
it('should change display from 55 to 5', inject(function(CalculatorService) {
mockDisplay = CalculatorService.insertValue(5,mockDisplay);
expect(parseInt(mockDisplay)).toEqual(5);
}));
});
})();
Wie kann ich diesen Service testen?
Wenn ein Test fehlschlägt, wäre es nett, den Fehler zu kennen. Warum definierst und initiierst du nicht mockDisplay in jeder deiner It-Funktionen, anstatt dasselbe für alle Tests zu verwenden? –
"Es ist kein Fehler, es ist eine Funktion". Es macht Sinn, dasselbe mockDisplay zu verwenden. Diese App ist irgendwie kalkuliert. Jedes Mal, wenn ich eine Ziffer einfüge, muss sie sich entscheiden, die vorherige Ziffer neu zu schreiben oder sie zu verbinden. Es ist alles in Ordnung, bis der letzte Test "Anzeige von 55 auf 5 ändern" fehlschlägt, bevor ich 55 und Zeichen der Teilung einfügte, danach warte ich darauf, 55 mit 5 neu zu schreiben, der nächste Test sollte gleich Test sein und sollte 11 zurückgeben Aber in diesem gescheiterten Test ist das Problem, dass ich 5 erwarte und 555 bekomme, weil nextNumber nicht definiert ist – Filosssof
Wie genau scheitern sie und welche Variablen sind nicht definiert? – estus