Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Service AngularJS使用$http和$q测试服务_Service_Angularjs_Jasmine_Promise_Karma Runner - Fatal编程技术网

Service AngularJS使用$http和$q测试服务

Service AngularJS使用$http和$q测试服务,service,angularjs,jasmine,promise,karma-runner,Service,Angularjs,Jasmine,Promise,Karma Runner,我对AngularJS和JS测试都是新手,在如何测试这个相当简单的服务的问题上,我很难集中精力。我尝试过使用$httpBackend和'when'和'expect'进入变体配置,但没有效果。测试应验证1)数据通过deferred.resolve返回,2)没有数据通过deferred.reject返回。如果有人能给我指出正确的方向,我将非常感激。谢谢 顺便说一句:我用的是茉莉花+Testal .service('myService', function($http, $q) { retur

我对AngularJS和JS测试都是新手,在如何测试这个相当简单的服务的问题上,我很难集中精力。我尝试过使用$httpBackend和'when'和'expect'进入变体配置,但没有效果。测试应验证1)数据通过deferred.resolve返回,2)没有数据通过deferred.reject返回。如果有人能给我指出正确的方向,我将非常感激。谢谢

顺便说一句:我用的是茉莉花+Testal

.service('myService', function($http, $q) {
    return {
        getMyData: function() {
            var deferred = $q.defer();

            $http.get('/foo/bar.do').success(function(data) {
                deferred.resolve(data);
            }).error(function(){
                deferred.reject();
            });

            return deferred.promise;
        }
    }
})

我在使用$http和$q测试服务时遇到了类似的问题。 以下是我通过的一项测试:

it('should issue a GET request to /foo/bar.do', inject(function ($httpBackend) {
  $httpBackend.when('GET', '/foo/bar.do').respond('success');
  var finalResult = '';

  var result = myService.getMyData();

  result.then(function(data) {
    finalResult = data;
  }, function() {
    console.log('error');
  });

  $httpBackend.flush();

  expect(finalResult).toBe('success');
}));

我在使用$http和$q测试服务时遇到了类似的问题。 以下是我通过的一项测试:

it('should issue a GET request to /foo/bar.do', inject(function ($httpBackend) {
  $httpBackend.when('GET', '/foo/bar.do').respond('success');
  var finalResult = '';

  var result = myService.getMyData();

  result.then(function(data) {
    finalResult = data;
  }, function() {
    console.log('error');
  });

  $httpBackend.flush();

  expect(finalResult).toBe('success');
}));

httpBackend应该这样做。您可以发布一些不起作用的测试代码吗?您是否使用$httpBackend.flush()?httpBackend应该这样做。你能发布一些不起作用的测试代码吗?你在使用$httpBackend.flush()?