मैं निम्नलिखित नियंत्रक EditMeetingCtrl.js
(function() {
'use strict';
angular
.module('myApp')
.controller('EditMeetingCtrl', EditMeetingCtrl);
EditMeetingCtrl.$inject = ['$rootScope', '$scope', '$state', '$http', '$translate',
'meetingService', 'companyService', 'notificationService', 'meeting'];
function EditMeetingCtrl($rootScope, $scope, $state, $http, $translate, meetingService, companyService, notificationService, meeting) {
$scope.meeting = meeting;
$scope.companyId = $state.params.companyId;
$scope.save = save;
function save() {
$scope.buttonDisable = true;
meetingService.saveMeeting($state.params.companyId, $state.params.meetingId, $scope.meeting)
.success(function(meetingId) {
//more code
});
}
}
})();
EditMeetingCtrlSpec.js परीक्षण का मामला
describe('in EditMeetingCtrl', function() {
var companyService , meetingService ;
meetingId = 123321 ;
companyId = 456654 ;
meetingObj = {} ;
var fakeHttpPromise = {
success: function() {}
};
beforeEach(angular.mock.module('myApp'));
beforeEach(angular.mock.inject(function (_$httpBackend_, _companyService_ , _meetingService_) {
$httpBackend = _$httpBackend_;
companyService = _companyService_;
meetingService = _meetingService_ ;
}));
describe('EditMeetingCtrl.save()', function() {
var $rootScope, scope, $controller , $q ;
beforeEach(inject(function ($rootScope, $controller , _meetingService_) {
scope = $rootScope.$new();
createController = function() {
return $controller('EditMeetingCtrl', {
$scope: scope,
meeting : {} ,
meetingService : _meetingService_
});
};
var controller = new createController();
}));
it("should save the meeting object", function() {
spyOn(meetingService, 'saveMeeting').and.returnValue(fakeHttpPromise);
scope.save();
expect(meetingService.saveMeeting).toHaveBeenCalledWith(meetingId , companyId , meetingObj);
});
});
});
नीचे परीक्षण casse EditMeetingCtrlSpec को चलाने के लिए प्रयास करते हैं .js मुझे निम्नलिखित परीक्षण विफलता मिली
PhantomJS 1.9.8 (Windows 8) EditMeetingCtrl Spying --> EditMeetingCtrl.save() should save the meeting FAILED
Expected spy saveMeeting to have been called with [ 123321, 456654, Object({ }) ] but actual calls were [ undef
ined, undefined, Object({ }) ].
तो मेरी समस्या को समझने का तरीका, save()
विधि के लिए सेवा कॉल में $state.params.companyId, $state.params.meetingId
पैरामीटर शामिल हैं और यह सेवा कॉल आने पर undefined
मान भेजता है। इसलिए मुझे $state.params
पर नकल करने की आवश्यकता है। सुनिश्चित नहीं है कि यह कैसे करें। क्या कोई मुझे सही दिशा में इंगित कर सकता है?
संपादित के बाद माइकल Radionov उत्तर
describe('EditMeetingCtrl.save()', function() {
var $rootScope, scope, $controller , $q , $state ;
beforeEach(inject(function ($rootScope, $controller , $state , _meetingService_) {
scope = $rootScope.$new();
createController = function() {
return $controller('EditMeetingCtrl', {
$scope: scope,
meeting : {} ,
meetingService : _meetingService_
});
};
var controller = new createController();
}));
it("should save the meeting", function() {
$state.params = { companyId: 123, meetingId: 567 };
spyOn(meetingService, 'saveMeeting').and.returnValue(fakeHttpPromise);
scope.save();
//expect(meetingService.saveMeeting).toHaveBeenCalledWith(meetingId , companyId , meetingObj);
});
});
मैंने ऊपर किया है, लेकिन मैं कह $ राज्य परिभाषित नहीं है निम्नलिखित त्रुटि मिलती है।
Firefox 38.0.0 (Windows 8.1) In EditMeetingCtrl EditMeetingCtrl.save() should save the meeting FAILED
TypeError: $state is undefined in C:/Users/sal/Documents/myApp/test/meeting/EditMe
etingCtrlSpec.js (line 80)
मैं यह हुआ क्योंकि मैं ऐसा नहीं करते ग्रहण ->$state : state
इंजेक्षन विधि में, तो मैं वह भी कर रही है की कोशिश की, लेकिन एक ही त्रुटि मिली। मुझे यहां क्या समझ नहीं आ रहा है ?
आपके उत्तर के लिए धन्यवाद। कृपया मेरे प्रश्न में किए गए संपादन को देखें। ? क्या मैं गलत हूं ? – Malik
मुझे लगता है कि यह गलत परिवर्तनीय नामों के कारण है। 'Var state; 'का उपयोग करें, फिर जब' राज्य = $ राज्य 'का उपयोग इंजेक्शन करते हैं, और' it' ब्लॉक में' state.params' का उपयोग करें। मैंने अपना जवाब अपडेट कर लिया है, संपादन लिंक देखें। –
धन्यवाद !! । वह काम किया । और अब मुझे पता है कि मैं क्या गलत कर रहा था। :) – Malik