0
Ich versuche, einen Unit-Test unter Verwendung von Karma und Jasmin für einen Angular Controller zu schreiben, dieEckige Unit-Test-Controller mit Service
storesController.js
(function() {
var app = angular.module('storesController', ['storesService']);
app.controller('StoresListController', function ($scope, StoresService) {
$scope.getStores = function() {
StoresService.getStores().then(function (data) {
$scope.stores = data.data;
});
};
$scope.getStores();
$scope.deleteStore = function (id) {
StoresService.deleteStore(id).then(function() {
$scope.getStores();
});
};
});
storesService.js auf einen Dienst abhängt
(function() {
var app = angular.module('storesService', []);
app.factory('StoresService', ['$http', function ($http) {
var stores = [];
stores.getStores = function() {
return $http.get(/api/getStores');
};
stores.deleteStore = function (storeID) {
return $http.delete(/api/deleteStore/'+storeID);
};
return stores;
}]);
})();
Und den Test, controllers.spec.js
describe('StoresController', function() {
beforeEach(module('storesController'));
var scope;
var storesServiceMock;
var controller;
beforeEach(inject(function ($controller, $rootScope) {
storesServiceMock = {
getStores: function() {
},
deleteStores: function() {
}
};
spyOn(storesServiceMock, 'getStores').and.returnValue({name : 'TestName', country : 'TestCountry'})
scope = $rootScope.$new();
controller = $controller('StoresListController', {
$scope: scope, StoresService: storesServiceMock
});
}));
it('scope.stores should be defined', function() {
expect(scope.stores).toBeDefined;
});
});
Und ich bin immer
TypeError: StoresService.getStores(...).then is not a function at n.$scope.getStores
ich auch Breite habe versucht httpBackend aber ich bin nicht in der Lage sein, damit es funktioniert, keine Ahnung, was ich falsch mache?
es funktioniert auf Chrome und Firefox, sondern wirft und Fehler auf, dh Reference: 'Versprechen' nicht bei Anonym-Funktion definiert –
Leider , benötigen Sie einen neueren Browser oder verwenden Sie etwas wie Babel, um zu transpilieren (oder erstellen Sie ein Versprechen mit angulars $ q-Bibliothek). – Lee
Nun, bei meinem Test läuft noch etwas schief. Er läuft mit 'expect (scope.stores) .toBeDefined(); 'und' expect (scope.stores) .toBeUnDefined(); ', das sollte nicht passieren und immer noch nicht funktionieren' expect (scope.stores.lenth) .toBeLessThan (2) ', got kann die 'length' Eigenschaft von null oder undefined nicht bekommen –