【发布时间】:2016-05-11 05:33:15
【问题描述】:
试图弄清楚如何检查注入服务上的方法是否被调用。
服务(基于工厂):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);。
我该如何管理?
【问题讨论】:
标签: angularjs unit-testing dependency-injection factory karma-jasmine