ローカル変数でサービスをテストする必要がありますが、ローカル変数を使用しないメソッドの一部は正常ですが、サービススコープで変数が定義されていないために失敗します。ここに私のコードは次のとおりです。ジャスミンで角度サービスをテストする
(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;
}
}
})();
、これは私のテストで:
(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);
}));
});
})();
どのように私は、このサービスをテストすることができますか?
テストに失敗した場合は、そのエラーを知ることがうれしいでしょう。すべてのテストで同じものを使うのではなく、 'it'関数のそれぞれでmockDisplayを定義して初期化してみませんか? –
「バグではなく、機能です」同じmockDisplayを使うのは理にかなっています。このアプリは一種のcalcです。私が数字を挿入するたびに、前の数字を書き換えたり、それらを連結したりする必要があります。最後のテストが55から5に変更する必要があるまでは大丈夫です.55を挿入して分け前のサインが失敗した後、5で55を書き直すのを待っています。次のテストは等しいテストでなければなりません。しかし、この失敗したテストでは、nextNumberが定義されていないので、5が来ると555になるという問題があります。 – Filosssof
どのように失敗し、どの変数が未定義ですか? – estus