Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
53
rated 0 times [  54] [ 1]  / answers: 1 / hits: 25961  / 8 Years ago, sat, june 25, 2016, 12:00:00

I have just started learning angular unit testing. However, this test on a function with http call fails. I have pin pointed the problem but however I am not being able to fix it. I know it's some simple issue



Controller



//Get data from URL
vm.getJson = function() {
var url = 'https://www.reddit.com/r/worldnews/new.json',
count = 0;
$http.get(url).success(function(response) {
console.log(response);
for (var i = 0; i < response.data.children.length; i++) {
vm.data.push(response.data.children[i].data);
count++;
if (count === response.data.children.length) {
vm.numberOfPages();
}
}

vm.result = true;

}).error(function(err) {
console.log(err);
});

};


The response I am getting is:
enter



Spec



 //Testing the getJson function
describe('vm.getJson()', function() {

it('It should return dummy Data as response and vm.result to be truthy', function() {

var dummyData = {name: 'Umair'};
$httpBackend.whenRoute('GET','https://www.reddit.com/r/worldnews/new.json').respond(200, dummyData);

MainCtrl.getJson();

$httpBackend.flush();

expect(MainCtrl.result).toBeTruthy();


}); });


I don't get any errors and the test passes if I remove the loop from the controller function. The error I am getting is:



Cannot read 'Children' of undefined. From the image I have attached with the response data, children is the array.


More From » angularjs

 Answers
15

When your test is run, $httpBackend actually intercepts the $http.get call and assign dummyData to the response as you indicated in



$httpBackend.whenRoute('GET','https://www.reddit.com/r/worldnews/new.json').respond(200, dummyData);


This mocking behavior allows your unit tests to be completed quickly without being reliant on reddit being reachable from your test machine. So in your controller, response.data = {name: 'Umair'} and that object has no child named children.



To fix this, for dummyData, try mimicking the real data a bit more.


[#61642] Thursday, June 23, 2016, 8 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
zainsagez

Total Points: 555
Total Questions: 99
Total Answers: 96

Location: Honduras
Member since Sat, Jul 24, 2021
3 Years ago
;