Hi Gillian,Charly

I am also facing similar issues.I have done as following:

beforeEach(inject(function($injector) {
     // Set up the mock http service responses
     $httpBackend = $injector.get('$httpBackend');    
     
     // backend definition common for all tests
     var url = 'xxxxx';
     var jsonObject={"userValid": true};
     $httpBackend.when('GET',url).respond(jsonObject);

     // Get hold of a scope (i.e. the root scope)
     $rootScope = $injector.get('$rootScope');
     // The $controller service is used to create instances of controllers
     var $controller = $injector.get('$controller');
     
     createController = function() {
       return $controller('loginCtrl', {'$scope' : $rootScope });
     };
   }));

afterEach(function() {
     $httpBackend.verifyNoOutstandingExpectation();
     $httpBackend.verifyNoOutstandingRequest();
   });
   
   it('should declare the user as valid', inject(function($controller) {
  $httpBackend.expectGET('xxxx);
    var controller = createController();
    $httpBackend.flush();     
    expect($rootScope.isUserValid).toEqual(true);
 }));

But I get error as:
Error: No pending request to flush !

Can you please tell me where am I going wrong?

Manish

On Monday, 7 July 2014 16:53:37 UTC+5:30, Gillian wrote:
>
> I'm trying to write a unit test for a controller which fetches article 
> details using $http service.
>
>
> Controller:
>
>      .controller('ArticleDetailCtrl',function($scope, Article, 
>> $routeParams, API_URL, ARTICLE_URL, $http, $sce){
>>     
>>     $scope.url = API_URL + ARTICLE_URL + '/' + $routeParams.articleId;
>>     
>>     $http.get($scope.url).then(function(response) {
>>     //console.log(response.data);
>>             $scope.heading = response.data.Headline;
>>             $scope.rawBody = response.data.Body;
>>             $scope.body = $sce.trustAsHtml($scope.rawBody);
>>             $scope.image = response.data.Assets[0].URL;
>>     });   
>>         });
>
>
>
>
> Unit test:
>
>     'use strict';
>>     
>>     describe('Controller: Article', function () {
>>     
>>         var scope,
>>             $httpBackend,
>>             articleEndpoint;
>>             
>>           
>>     
>>         // load the controller's module
>>         beforeEach(module('myApp'));
>>         
>>         
>>         describe('ArticleDetailCtrl', function () {
>>     
>>             var ArticleDetailCtrl,
>>                 jsonObject,
>>                 ArticleId = '123';
>>             
>>             // Initialize the controller and a mock scope
>>             beforeEach(inject(function ($controller, $rootScope, 
>> _$httpBackend_, Article, API_URL, ARTICLE_URL) {
>>                 
>>                 scope = $rootScope.$new();
>>                 ArticleDetailCtrl = $controller('ArticleDetailCtrl', { 
>> $scope: scope });
>>                 $httpBackend =  _$httpBackend_;
>>                 articleEndpoint = API_URL + ARTICLE_URL + '/' + ArticleId;
>>                 
>>                 jsonObject = {
>>                     'Headline': 'Headline',
>>                     'Body': '<p>Body</p>',
>>                     'Assets': [
>>                         {
>>                             'URL': 'path/to/image/article1.jpg'
>>                         }
>>                     ]
>>                 };
>>                 
>>                 $httpBackend.when('GET', 
>> articleEndpoint).respond(jsonObject);
>>             }));
>>             
>>             afterEach(function() {
>>                 $httpBackend.verifyNoOutstandingExpectation();
>>                 $httpBackend.verifyNoOutstandingRequest();
>>             });
>>     
>>             it('should fetch article details from the API', function () {
>>                 //expect(scope.articles.length).toEqual(3);
>>                 
>>                 $httpBackend.expectGET(articleEndpoint);
>>                 $httpBackend.flush();
>>             });
>>       
>>         });    
>>         
>>     });
>
>
>
> But I keep on getting the following error:
>
>
> Error: Unexpected request: GET 
>> http://localhost:3000/api/articles/undefined
>> Expected GET http://localhost:3000/api/articles/123
>>    at $httpBackend 
>> (/Users/gill/Documents/projects/angularjs-test/app/bower_components/angular-mocks/angular-mocks.js:1179)
>>    at sendReq 
>> (/Users/gill/Documents/projects/angularjs-test/app/bower_components/angular/angular.js:8181)
>>    at 
>> /Users/gill/Documents/projects/angularjs-test/app/bower_components/angular/angular.js:7921
>>    at 
>> /Users/gill/Documents/projects/angularjs-test/app/bower_components/angular/angular.js:11319
>>    at 
>> /Users/gill/Documents/projects/angularjs-test/app/bower_components/angular/angular.js:11405
>>    at 
>> /Users/gill/Documents/projects/angularjs-test/app/bower_components/angular/angular.js:12412
>>    at 
>> /Users/gill/Documents/projects/angularjs-test/app/bower_components/angular/angular.js:12224
>>    at 
>> /Users/gill/Documents/projects/angularjs-test/app/bower_components/angular-mocks/angular-mocks.js:1438
>>    at 
>> /Users/gill/Documents/projects/angularjs-test/test/spec/controllers/article.js:77
>> Error: Unsatisfied requests: GET http://localhost:3000/api/articles/123
>>    at 
>> /Users/gill/Documents/projects/angularjs-test/app/bower_components/angular-mocks/angular-mocks.js:1472
>>    at 
>> /Users/gill/Documents/projects/angularjs-test/test/spec/controllers/article.js:65
>
>
>
> This is the first time am writing unit tests which I followed along by 
> reading some tutorials. I don't know what am I doing wrong?
>

-- 
You received this message because you are subscribed to the Google Groups 
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

Reply via email to