我試圖測試這個控制器功能:
$scope.deleteAccount = function(account) {
Account.deleteAccount(account._id)
.then(function() {
angular.forEach($scope.accounts, function(a, i) {
if (a === account) {
$scope.accounts.splice(i, 1);
}
});
})
.catch(function(err) {
$scope.errors.other = err.message;
});
};
這是一個管理頁面上。該函數調用工廠(承諾),工廠刪除服務器上的帳戶。然後該函數刪除範圍內的元素,以便刪除的元素不再顯示。
我的測試看起來像這樣:
beforeEach(inject(function ($controller, $rootScope, _$location_, _$httpBackend_) {
$scope = $rootScope.$new();
$location = _$location_;
$httpBackend = _$httpBackend_;
fakeResponse = '';
AdminAccountCtrl = $controller('AdminAccountCtrl', {
$scope: $scope
});
$location.path('/admin/account');
}));
it('test delete account', function() {
expect($location.path()).toBe('/admin/account');
$httpBackend.expectGET('/api/accounts').respond([{_id: 1}, {_id: 2}, {_id: 3}]);
$httpBackend.when('GET', 'app/admin/admin.account.html').respond(fakeResponse);
$httpBackend.when('DELETE', '/api/accounts/1').respond(fakeResponse);
$httpBackend.flush();
$scope.deleteAccount($scope.accounts[0]);
expect($scope.accounts).toEqual([{_id: 2}, {_id: 3}]);
});
可悲的結果是:
Expected [ { _id : 1 }, { _id : 2 }, { _id : 3 } ] to equal [ { _id : 2 }, { _id : 3 } ].
而......你的問題是什麼? – Aracthor
第一個元素未被刪除 - 測試失敗。 我想知道爲什麼數組沒有改變。 –