Zamiast natrysku kodu testowego z szpiegów można stworzyć właściwą makiety usługi w własny moduł i dodaj go w każdym teście, który tego potrzebuje.
Test jednostki kontrolera znajduje się w pliku test/spec/modules/user/controller.js.
Wyśmiewana usługa znajduje się w pliku test/mock/modules/user/service.js.
dla metody kontrolera:
$scope.refreshList = function() {
UserService.all(pageNumber, size, sort, function(data) {
$scope.users = data.content;
$scope.page = data.page;
});
};
szydzili usługa:
(function() {
'use strict';
angular.module('app.user.mock', ['app.user']);
angular.module('app.user.mock').factory('UserServiceMock',
['$q',
function($q) {
var factory = {};
factory.mockedUsers = {
content: [ { firstname: 'Spirou', lastname: 'Fantasio', email: '[email protected]', workPhone: '983743464365' } ],
page: '1'
};
factory.search = function(searchTerm, page, size, sort, callback) {
var defer = $q.defer();
defer.resolve(this.mockedUsers);
defer.promise.then(callback);
return defer.promise;
};
factory.all = function(page, size, sort, callback) {
var defer = $q.defer();
defer.resolve(this.mockedUsers);
defer.promise.then(callback);
return defer.promise;
};
return factory;
}
]);
})();
i testy jednostka kontroler:
(function() {
'use strict';
var $scope;
var listController;
var UserServiceMock;
beforeEach(function() {
module('app.project');
module('app.user.mock'); // (1)
});
beforeEach(inject(function($rootScope, _UserServiceMock_) {
$scope = $rootScope.$new();
UserServiceMock = _UserServiceMock_; // (2)
}));
describe('user.listCtrl', function() {
beforeEach(inject(function($controller) {
listController = $controller('user.listCtrl', {
$scope: $scope,
UserService: UserServiceMock
});
}));
it('should have a search function', function() { // (3)
expect(angular.isFunction(UserServiceMock.search)).toBe(true);
});
it('should have an all function', function() {
expect(angular.isFunction(UserServiceMock.all)).toBe(true);
});
it('should have mocked users in the service', function() {
expect(UserServiceMock.mockedUsers).toBeDefined();
});
it('should set the list of users in the scope', function(){
expect($scope.users).not.toEqual(UserServiceMock.mockedUsers);
$scope.refreshList();
$scope.$digest();
expect($scope.users).toEqual(UserServiceMock.mockedUsers.content);
});
});
})();
Państwo dodać moduł zawierający app.user.mock wyśmiewana usługa (1) i wstrzyknąć wyśmiewaną usługę w kontrolerze (2).
Możesz następnie przetestować wstrząśnięty serwis (3).
Po prostu chcesz podzielić się próbą usługi pośród wielu testów? A może szukasz sposobu na sfałszowanie wywołania $ http i skorzystania z usługi w twoich testach dyrektywy i kontrolera? –
udostępnij próbę usługi wśród wielu zestawów testowych. dokładniej, unikaj wklejania kopii na długo przedEach(). Wczoraj utworzyłem usługę w module 'myapp.mocks' i umieściłem ją w testacular.conf.js, a następnie ładuję ją za pomocą' module (myapp.mocks) '. Wyodrębniłem również odpowiedź mojego serwera do innego pliku i utworzyłem 'var RESPONSE_SERVER = {json here}'. jeśli to brzmi jak dobre rozwiązanie, rozwiążę więcej i odpowiem sobie poniżej: –
To jest właśnie to, co zamierzałem polecić. Stworzyłem plik .js, który zawierał zwykłą starą funkcję javascript, którą wywołałem, aby utworzyć próbę. Inna prosta stara funkcja javascript do konfigurowania odpowiedzi serwera na testy.I jak mówisz, jeśli zdefiniujesz zmienną globalną z odpowiedziami json, możesz użyć jej w swoich testach do porównania. –