2
在角JS工廠變量我想測試questionsBucket
在這個製造工廠如何測試使用茉莉花
.factory('QA', function(ShuffleArray, RandWords){
var answersBucket = RandWords.get(9);
var questionsBucket = answersBucket;
var questionToRemove, answers, question;
var QA = {
answers: function(amount){
if(typeof(amount) === 'undefined') amount = 3;
answers = ShuffleArray.shuffle(answersBucket).slice(0,amount);
return answers;
},
question: function(){
questionToRemove = questionsBucket.indexOf(answers[Math.floor(Math.random() * 3)]);
question = questionsBucket.splice(questionToRemove, 1)[0];
return question;
}
};
return QA;
});
正如你可以看到questionsBucket
是不是在QA對象返回一個變量,我不想讓它暴露於任何使用它的東西。
在Ruby中,有很多方法可以獲取這些數據或訪問私有方法,但我無法看到如何在Angular中執行此操作。
以下是我想如何在Jasmine中編寫測試的方法。
it('should remove a question from the questionsBucket',
inject(function(QA){
var answers = QA.answers(5);
var question = Qa.question();
//I can't access the questionBucket :(
expect(QA.questionsBucket).toEqual(4);
}));
是的,我已經實現了第一種方式,但我真的不希望questionBucket可以在普通代碼中訪問。我只是想知道是否有辦法將它設置爲一個私有變量,但他們讓測試訪問它? –
沒有。沒有關閉或處理它,你不能這樣做;然而,就你而言,你可能會發現將'questionsBucket'和'answersBucket'移入他們自己的服務/提供者/工廠並將其注入到任何需要它的地方都是有好處的。然後,您可以正確地分離並測試注射劑作爲自己的東西。 –