0
我已經得到了從服務器獲取用戶陣列服務:
function getUsers() {
var UsersResource = $resource('assets/data/users.json', {}, {
query: {
method: "GET",
isArray: true
}
});
var users = UsersResource.query().$promise;
return users;
}
function signIn(loginField, password) {
return getUsers()
.then(function(users) {
for (var i = 0; i < users.length; i++) {
if (users[i].login == loginField && users[i].password == password) {
$rootScope.logged = true;
$rootScope.user = users[i].login;
$location.path('/courses');
return true;
}
}
return false;
})
.catch(function() {
console.log("Error: Users array wasn't retrieved from the server");
return false;
});
}
而現在我想這種方式測試它(是的,它實際上是控制器的測試,它有它的一個引用服務):
describe('LoginController', function() {
beforeEach(module('task6'));
var $rootScope, $controller, LoginService;
beforeEach(inject(function(_$rootScope_, _$controller_, _LoginService_) {
$rootScope = _$rootScope_;
$controller = _$controller_;
LoginService = _LoginService_;
}));
describe('LoginController.submitLogin', function() {
it('tests if such user exists', function(done) {
var $scope = $rootScope.$new();
var controller = $controller('LoginController', {$scope: $scope});
controller.loginField = 'John';
controller.password = 'Smith';
LoginService.signIn(controller.loginField,
controller.password)
.then(function(logged) {
expect(false).toBe(true);
done();
})
$scope.$digest();
});
});
});
但它不工作:「錯誤:超時 - 異步回調不被jasmine.DEFAULT_TIMEOUT_INTERVAL指定的超時時間內調用。」 我不明白我在做什麼錯。 :)
P.S.或者它甚至會更好,如果我有機會測試控制器本身,這與服務工作:
self.submitLoginForm = function() {
LoginService.signIn(self.loginField, self.password)
.then(function(logged) {
if(!logged) {
self.loginError = true;
}
})
.catch(console.log.bind(console));
};