kaynak tabanlı bir fabrika için jasmine kullanarak açısal js birim testi Ben jasmine kullanarak birim test durumunda yazıyorum. Kaynak tabanlı bir hizmeti sunucudan gerçek veriler almasına karşın istenen sonuçları almamak için denetlemek istiyorum. Lütfen yanlış yaptığım yerlerde girişlerinizi belirtin. Aşağıda yazdım birim testidir: ('NewStarterController', function() { beforeEach (modülünü ('myApp')) tanımlamak, aynı olduğundandenetleyici
var context = 'http://localhost.com:8085/AngularPrototype/home';
beforeEach(inject(function(_$resource_, $rootScope, $controller) {
$resource = _$resource_;
NewStarter = {
getNSData : function() {
return $resource(context + '/selfservice/newstarter/get', {}, {
get : {
method : 'GET'
}
});
}
};
scope = $rootScope.$new();
$controller('NewStarterController', {
$scope : scope,
NewStarter : NewStarter
});
}));
it('should test new starter data', function() {
NewStarter.getNSData().get({}).$promise.then(function(response) {
scope.refData = response;
scope.data();
});
expect(scope.data.length).toEqual(2);
expect(NewStarter.getNSData().get.length).toEqual(2);
expect(NewStarter.getNSData().get()).toEqual('formTitleNode');
});
});
Below is the jasmine test result ::
Jasmine 1.3.1 revision 1354556913finished in 0.183s
•
No try/catchFailing 1 spec1 spec | 1 failing
NewStarterController
should test new starter data
NewStarterController should test new starter data.
Expected 0 to equal 2.
Expected 4 to equal 2.
Expected { $promise : { $$state : { status : 0 } }, $resolved : false } to equal 'formTitleNode'.
get.json -> represents the data that is returned from server(Data returned from RestController) on hitting the url : http://localhost.com:8085/AngularPrototype/home/selfservice/newstarter/get
SpecRunner.html-> is used to run the jasmine unit test. Below are the contents of this file :
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Jasmine Demo</title>
<script>
libraries here
</script>
</head>
<body>
<!-- Include Angular and Angular Mocks-->
<script>libraries here </script>
<!-- Include your source files here... -->
<script src="services/services.js"></script>
<script src="myApp.js"></script>
<script src="controller/selfservice/NewStarterController.js"></script>
<!-- Include your spec files here... -->
<script src="jasmineunittest/NewStarterControllerTest.js"></script>
<!-- Jasmine execution script (Standard Jasmine Bolierplate)-->
<script type="text/javascript">
var jasmineEnv = jasmine.getEnv();
jasmineEnv.updateInterval = 1000;
var htmlReporter = new jasmine.HtmlReporter();
jasmineEnv.addReporter(htmlReporter);
jasmineEnv.execute();
</script>
</body>
</html>
Below is the controller code (NewStarterController.js) which is unit tested :
myApp.controller("NewStarterController", ['$scope','$modal', '$state', '$sce', 'NewStarter', function($scope,$modal, $state, $sce, NewStarter) {
$scope.data = function() {
NewStarter.getNSData().get({}, function(response) {
$scope.refData = response;
$scope.formTitle = [];
$scope.displayOptions = [];
angular.forEach($scope.refData.formTitleNode, function(contentItem)
{
var content = -1;
var title = -1;
angular.forEach(contentItem.fieldList, function(fieldBean)
{
if(fieldBean.fieldName == 'TITLE')
{
title = fieldBean.fieldValue;
}
if(fieldBean.fieldName == 'FORMATTEDCONTENTS')
{
content = fieldBean.fieldValue;
}
})
$scope.formTitle.push({title:title, content:content});
})
angular.forEach($scope.refData.displayOptionsNode, function(contentItem)
{
var nsContent = -1;
var nsTitle = -1;
angular.forEach(contentItem.fieldList, function(fieldBean)
{
if(fieldBean.fieldName == 'TITLE')
{
nsTitle = fieldBean.fieldValue;
}
if(fieldBean.fieldName == 'FORMATTEDCONTENTS')
{
nsContent = fieldBean.fieldValue;
}
})
$scope.displayOptions.push({nsTitle:nsTitle, nsContent:nsContent});
$scope.selectedOption = '';
})
$scope.hasNewStarterSubmitted = $scope.refData.hasNewStarterSubmitted;
$scope.submittedSelectedOption = $scope.refData.submittedSelectedOption;
$scope.submittedStudentLoan = $scope.refData.submittedStudentLoan;
$scope.nsAlreadySubmittedValidationMsg = $scope.refData.nsAlreadySubmittedValidationMsg;
console.log('Success', response);
}, function(error) {
//alert(JSON.stringfy(error))
$scope.contentLoadErrorMsg=error.data;
//console.error('ERR', error);
});
}
}]);
Below is the code in services.js
myApp.factory('NewStarter', function($resource, context) {
return {
getNSData: function() {
return $resource(context + '/selfservice/newstarter/get', {}, {get: {method:'GET'}});
},
submitNSForm: function() {
return $resource(context + '/selfservice/newstarter/submit', {}, {submit: {method:'POST'}});
}
}
});
Below is the code in myApp.js
var myApp = angular.module('myApp', ['ngResource', 'ngSanitize', 'ui.bootstrap', 'ui.router']);
myApp.constant('context', '/AngularPrototype/home');
myApp.constant('projectName', '/AngularPrototype');
myApp.config(function($stateProvider, $urlRouterProvider, projectName) {
$urlRouterProvider.otherwise('/home');
$stateProvider .state('newStarter', {
url:'/newstarter',
templateUrl: projectName + '/newstarter',
controller: 'NewStarterController'
})
});
Thanks!
Below i tried as per your suggestion but getting error while running the unit test:
describe('NewStarterController', function() {
beforeEach(module('myApp'));
var scope, postDefer,NewStarter;
beforeEach(inject(function(_NewStarter_, $rootScope, $controller,$q) {
NewStarter = _NewStarter_;
postDefer = $q.defer();
spyOn(NewStarter,'getNSData').and.returnValue(postDefer.promise);
scope = $rootScope.$new();
$controller('NewStarterController', {
$scope : scope,
NewStarter : NewStarter
});
}));
it('should test new starter data', function() {
NewStarter.getNSData().get({});
postDefer.resolve();
scope.$apply();
expect(scope.data.length).toEqual(2);
});
});
Below are the errors while running the test :
Error:[$injector:unpr] Unknown provider: NewStarterProvider <- NewStarter
typeError: Unable to get property 'getNSData' of undefined or null reference
Eğer sonuç doğrulamak için gereken zaman sahte getNSData, $ kaynak çağrı sadece yerine bir söz dönün ve söz çözmek zorunda değildir. Diğer sorulara cevabımı kontrol edin http://stackoverflow.com/questions/36189329/testing-a-controller-that-execute-a-service-with-resource-response/36193211#36193211 – sdfacre
Önerilerinize göre denedim ama işe yaramadı. getNSData yöntemi tanınmadı. Kodu paylaşır mısınız lütfen? Teşekkürler! –
Sorunuzu, önerim uyarınca denediğiniz kodla günceller misiniz? – sdfacre