我有一個簡單的控制器,我需要做的就是分配一個值範圍的第一件事控制器。
function TestCtrl($scope, $http) {
$scope.listForms = 'some list';
}
下測試控制器按預期工作:
describe('Testing a controller', function() {
var ctrl, scope, httpMock;
beforeEach(inject(function($injector) {
scope = $injector.get('$rootScope').$new();
ctrl = $injector.get('$controller');
ctrl(TestCtrl, { $scope: scope });
}));
it("assigns to scope", function() {
expect(scope.listForms).toMatch("some list");
});
});
但是,當我改變功能從我的API
function TestCtrl($scope, $http) {
$http.get('/api/listForms').success(function(list) {
$scope.aListOfForms = 'some list';
});
}
和測試修改
獲取列表describe('Testing a controller', function() {
var ctrl, scope, httpMock;
beforeEach(inject(function($injector) {
httpMock = $injector.get('$httpBackend');
scope = $injector.get('$rootScope').$new();
httpMock.when('GET', '/tactical/api/listOrderForms').respond("an order form");
ctrl = $injector.get('$controller');
ctrl(TestCtrl, {
$scope: scope,
$http: httpMock
});
}));
it("gets the list from the api and assigns it to scope", function() {
httpMock.expectGET('tactical/api/listOrderForms');
expect(scope.orderFormList).toMatch("an order form");
httpMock.flush();
});
});
我ge t出現以下錯誤:
TypeError: 'undefined' is not a function
Expected undefined to match 'an order form'.
Error: No pending request to flush !
有人知道我在做什麼錯嗎?提前致謝。
謝謝這真的有幫助,傻了我。 – 2013-04-25 15:36:38
但是你沒有修改$ httpBackend的實際實現。那麼Angular知道如何在真正的$ httpBackend對象上調用(不管)方法,而是在調用$ http.get()時調用httpMock? (這是Angular的新手) – Nikhil 2013-09-26 22:39:52
Nikhil,當$ http初始化時,$ http會要求$ httpBackend。 $ httpBackend是一個單例(只存在一個實例),httpMock是對它的引用。註冊回調函數,並在測試和$ http之間共享的$ httpBackend實例上執行這些工作。 – 2013-11-28 08:44:00