2016-07-06 32 views
0

我刚开始接触单元测试和角度1.2。我正在使用$ httpBackend服务来测试服务中的$ httpcall。这种服务被称为我的控制器内:

var app = angular.module('myApp', []); 

app.controller('MainCtrl', function (someService) { 
    var vm = this; 
    vm.hasError = false; 

    //debugger; 
    someService.someAsyncCall() 
     .then(function (data) { 
      vm.hasError = false; 
     }) 
     .catch(function (data) { 
      vm.hasError = true; 
     }); 
}); 

app.factory('someService', function ($http) { 
    return { 
     someAsyncCall: function() { 
      return $http.get("/data") 
       .success(function (data) { 
        //return true 
       }) 
       .error(function() { 
        console.log('error'); 
        //return false 
       }); 
     } 
    }; 
}); 

我试图写当端点是错误的测试:

beforeEach(function() { 
     someServiceMock = jasmine.createSpyObj('someService', ['someAsyncCall']); 
     module('myApp'); 

     inject(function ($rootScope, $controller, $q, _$timeout_,$httpBackend) { 
      $scope = $rootScope.$new(); 
      someServiceMock.someAsyncCall.andReturn($q.when('weee')); 
      $timeout = _$timeout_; 
      controllerService = $controller; 
      httpMock = $httpBackend; 
     }); 
    }); 


    it("should set hasError=true with error request", function() { 
     httpMock.expectGET("/datajfds").respond(false); 
     ctrl = controllerService('MainCtrl', {someService: someServiceMock}); 
     expect(ctrl.hasError).toBe(true); 
    }); 

这是错误:

MainCtrl测试应该设置hasError =错误请求时为true。

Expected false to be true. 
Error: Expected false to be true. 
    at new jasmine.ExpectationResult (http://cdnjs.cloudflare.com/ajax/libs/jasmine/1.3.1/jasmine.js:114:32) 
    at .toBe (http://cdnjs.cloudflare.com/ajax/libs/jasmine/1.3.1/jasmine.js:1235:29) 
    at .<anonymous> (http://run.plnkr.co/Q77IyPb6agUqgR2U/specs.js:37:31) 

基本上我想覆盖/写一个测试,当someService.someAsyncCall()会捕获一个错误。我怎样才能编写这个测试,以便ctrl.hasError = true?

plunkr:http://plnkr.co/edit/aX29h4k64ZUm6hDedZl6?p=preview

回答

0

有很多与你在做什么的问题,我不明白你正在尝试与第三次测试做。您点击的API在服务中配置。

$http.get("/data") 

参见本plunker这可能是你试图做测试。一些问题:

你被注入了很多的没有必要

您的服务呼叫不返回任何东西。

你不是从服务呼叫

+0

好功夫,只是一个问题所获得的价值:最后符合规范的vm.hasError被设置虽然那么()的一部分。它应该遍历catch()部分。另请参阅:http://plnkr.co/edit/EoIgQuoeIwD5eP0JLXIn?p = preview –

+0

只有当您尝试点击的服务返回错误时才会运行catch。也就是说,由于错误,服务无法响应。我已经更新了第三个测试,以显示如何使用$ httpBackend来获取服务来抛出错误。 – ScottL