2016-11-30 9 views
0

Это функция в контроллере:

var vm = this; 
vm.getData = getData; 

function getData(val) { 
    return $http.get('/get-data', { 
    params: { 
     query: val 
    } 
    }).then(function(response) { 
    return response.data; 
    }); 
} 

и это мой (урезанный) тестовый файл:

describe('Controller: MyCtrl', function() { 
    'use strict'; 

    var MyCtrl; 
    var rootScope; 
    var scope; 
    var httpMock; 

    beforeEach(function() { 
    module('MyModule'); 

    inject(function($controller, $rootScope, $httpBackend) { 
     rootScope = $rootScope; 
     scope = $rootScope.$new(); 
     httpMock = $httpBackend; 
     MyCtrl = $controller('MyCtrl as vm', { 
     $rootScope: rootScope, 
     $scope: scope, 
     $http: httpMock, 
     }); 
    }); 
    }); 

    describe('vm.getData()', function() { 
    it('returns the required data', function() { 
     httpMock.when('GET', '/get-data?query=test-val').respond(200, {data: 'test-data'}); 
     httpMock.flush(); 
     expect(scope.vm.getData('test-val')).toEqual('test-data'); 
    }); 
    }); 
}); 

Я хотел бы чтобы проверить, что результат при вызове getData() возвращает правильные данные.

В настоящее время я получаю ошибку $http.get is not a function. Установка точки останова в моей функции показывает, что http зашифрован с помощью $ httpBackend.

Я думаю, что есть что-то фундаментальное, я не понимаю - любые указатели будут очень благодарны.

ответ

0

Вы не должны создать контроллер с:

$http: $httpBackend 

издеваться бэкенд. $ httpBackend уже издевается над запросом.

Далее испытание и утверждение делается в неправильном порядке:

httpMock.when('GET', '/get-data?query=test-val').respond(200, {data: 'test-data'}); 
MyCtrl.getData('test-val').then(function(_result_){ //perform the request 
    result = _result_;        //save the result of the promise 
}); 
httpMock.flush();         //execute the request 
expect(result).toBe('test-data');     //assert that the result is as expected 
+0

Это является удивительным - большое спасибо jlast :) – Jay

+0

Просто для полноты картины, вот это блок с парой необходимо вносящий поправки: ' он ('возвращает требуемые данные', function() { var result = {}; httpMock.when ('GET', '/get-data?query=test-val').respond(200, {data : 'test-data'}); MyCtrl.getData ('test-val'), затем (function (_result _) { result = _result_; }); httpMock.flush(); ожидать (результат) .toEqual ({data: 'test-data'}); }); ' – Jay

 Смежные вопросы

  • Нет связанных вопросов^_^