Попытка выяснить, как проверяется метод вызова на впрыскиваемой службе.Тестирование вызова метода на впрыснутом сервисе
Служба (на базе завода): loginService.js
angular.module('loginService', [])
.factory('loginService', function (URLbase, $http, loginModel, $route, $location, logoutService, overviewService) {
return {
logMeIn: function (login) {
$http({
method: 'POST',
url: URLbase + 'authentication/login',
data: {'Login': login.username, 'Password': login.password}
}).then(function (result) {
loginModel.set('passwordRequested', false);
loginModel.set('loginFailed', false);
loginModel.set('loginExpired', false);
loginModel.set('loginBlocked', false);
loginModel.set('loggedIn', false);
loginModel.set('sessionExpired', false);
loginModel.set('loggedIn', false);
loginModel.set('concurrentLogin', false);
loginModel.set('somethingWrong', false);
// Check login result by status code
var status = result.data.Response.Status.StatusCode,
data = result.data.Response.Payload;
switch (status) {
case 0:
loginModel.set('tokenToken', data.Token);
loginModel.set('tokenUserId', data.userId);
loginModel.set('userName', data.User.FirstName + ' ' + data.User.SurName);
loginModel.set('userFirstName', data.User.FirstName);
loginModel.set('userLastName', data.User.SurName);
loginModel.set('userEmailAddress', data.User.Email);
loginModel.set('userPhone', data.User.Phone);
loginModel.set('userPreferredLanguage', data.User.PreferredLanguage);
loginModel.set('loggedIn', true);
......
Тест Блок
beforeEach(inject(function ($controller, _$rootScope_, _$httpBackend_, $injector, _loginService_, _loginModel_) {
loginService = _loginService_;
httpBackend = _$httpBackend_;
$rootScope = _$rootScope_;
loginModel = _loginModel_;
loginPost = {'Login': login.username, 'Password': login.password};
httpBackend.whenPOST(URLbase + 'authentication/login', loginPost).respond(200, jsonObj);
}));
it('should get login data from the backend', function() {
spyOn(loginService, 'logMeIn').andCallThrough();
loginService.logMeIn(login);
expect(loginService.logMeIn).toHaveBeenCalledWith(login);
httpBackend.flush();
//spyOn(loginModel, 'set').andCallThrough();
//loginService >> logMeIn >> loginModel.set('userLastName', 'Vijver');
//metod >> toHaveBeenCalledWith('userLastName', 'Vijver');
});
Таким образом, в последние 3 строки комментария, я хочу, чтобы проверить, если loginModel.set('userFirstName', data.User.FirstName);
вызывается с правильные параметры.
Как я могу управлять этим?
имеет смысл, реализовал его, но я получил ошибку 'TypeError: Can not read property 'then' of undefined' –
@SanJayFalcon, потому что вы не возвращаете обещание. Измените функцию logMeIn(), чтобы вернуть ее. См. Мое редактирование – Katana24
, это работает, но функция loginModel.set существует в определенном случае коммутатора. Я заставляю код работать через другой случай переключения теперь, который не содержит эту функцию, но все же тест преуспевает. 'loginModel.set', кажется, тестируется автономно, его нужно проверить как свойство на loginService? –