मैं अपने नियंत्रक बनाने के लिए "नियंत्रक के रूप में" वाक्यविन्यास का उपयोग कर रहा हूं। मेरे पास एक निजी प्रारंभिक फ़ंक्शन है जो डिफ़ॉल्ट डेटा लोड करने के लिए फ़ंक्शन को कॉल करता है।मैं जैस्मीन का उपयोग कर नियंत्रक विधि पर जासूसी कैसे करूं?
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
var mc = this;
mc.dataLoaded = false;
function init() {
mc.loadData();
}
mc.loadData = function(){
mc.dataLoaded = true;
}
init();
});
अपने परीक्षण में मैं जाँच करने के लिए है कि क्या loadData
समारोह बुलाया गया है एक जासूस बना रहा हूं। हालांकि मैं सत्यापित कर सकता हूं कि फ़ंक्शन को mc.dataLoaded
ध्वज के परीक्षण के द्वारा बुलाया गया है, लेकिन मेरा जासूस फ़ंक्शन को रिकॉर्ड करने के लिए प्रतीत नहीं होता है। फ़ंक्शन कॉल को सही तरीके से रिकॉर्ड करने के लिए मैं जासूसी कैसे प्राप्त कर सकता हूं?
describe('Testing a Hello World controller', function() {
var $scope = null;
var ctrl = null;
//you need to indicate your module in a test
beforeEach(module('plunker'));
beforeEach(inject(function($rootScope, $controller) {
$scope = $rootScope.$new();
ctrl = $controller('MainCtrl as mc', {
$scope: $scope
});
spyOn($scope.mc, 'loadData').and.callThrough();
}));
it('should call load data', function() {
expect($scope.mc.loadData).toHaveBeenCalled();
//expect($scope.mc.dataLoaded).toEqual(false);
});
});
प्रश्न शायद दायरे से बाहर हो सकता है ... एक ऐसे कार्य पर जासूसी करना संभव हो सकता है जो $ स्कोप में नहीं है? मेरा मतलब है, उस कोड में 'init' जासूसी। –
"यदि मेनकॉर्टर सिर्फ आंतरिक रूप से कुछ कर रहा है, तो उसके परिणाम का परीक्षण करें, उदाहरण के लिए, उस नियंत्रक के डेटा/गुणों को अद्यतन कर रहे हैं। यह परीक्षण के लायक भी नहीं हो सकता है यदि यह काफी छोटा हो।" यह बोल्ड होना चाहिए !!! –
और आंतरिक नियंत्रक प्रारंभिक कोड किसी अन्य सेवा पर भरोसा नहीं करता है, परीक्षण की आवश्यकता के लिए पर्याप्त जटिल है, और इसका दायरा गुणों पर कोई दुष्प्रभाव नहीं है? प्रारंभिकरण कोड को किसी अन्य सेवा में स्थानांतरित करने का आपका एकमात्र विकल्प है? यूनिट परीक्षणों को सक्षम करने के लिए बस अपना कोड अधिक जटिल बनाने के लिए शर्म की तरह लग रहा है। – d512