1

こんにちは、ログインを処理する次のコントローラーがあります。

angular.module('fancyApp')
.controller('MainCtrl', function ($scope, $location, $http, LoginFactory) {
 $scope.loginForm = function(isValid) {

if (isValid) {
 var status;

 LoginFactory.login($scope.person).then(function(d) {
  console.log(d);
  $scope.data = d;

  if (d.status === 200) {
      //login success
      $('.loginFail').hide();
      $location.path('/student');

    } else {
      $scope.loginFail = 'Failed to login';
      $('.loginFail').show();
    }

  });

  } else {
  $scope.login_form.submitted = true;
 }
 };
});

そして、これは私の LoginFactory ログイン関数です:

angular.module('fancyApp')
.factory('LoginFactory', function ($http, $q) {
return {
  login: function(user) {
    var promise = $http.post( 'api/v1/login', user).then(function (response) {
      return response;
    }, function(error) {
      return error;
    });
    return promise;
  };
});

これは私のbeforeEachです:

beforeEach(inject(function ($controller, $provide, $location, $rootScope) {
location = $location;
rootScope = $rootScope;

var testService = {
  getStudents: function() {
    return ['student1', 'student2'];
  },
  getAdmins: function() {
    return ['admin1', 'admin2'];
  },
  login: function(person) {
    console.log(testService.getStudents().indexOf(person.user));
    if(testService.getStudents().indexOf(person.user) !== -1) {
      return {status:200, token:'xxx', role:'student'};
    }
    else if(testService.getAdmins().indexOf(person.user) !== -1) {
      return {status:200, token:'xxx', role:'admin'};
    }
    else {
      return {status:401, token:'xxx', role:'student'};
    }
  }
};

scope = $rootScope.$new();
$provide.service('LoginService', testService);
MainCtrl = $controller('MainCtrl', {
  $scope: scope
});
}));

そして、ここに私のテストがあります:

it('Login should succeed', inject(function($httpBackend){
    spyOn(testService, 'login');

    scope.person.user = 'student1';
    scope.person.pass = '123456';
    scope.login(true);
    expect(testService.login).toHaveBeenCalledWith('student1', '123456');

  }));

私が得るエラーは次のとおりです。

エラー: [$injector:unpr] 不明なプロバイダー: $provideProvider < $provide

これがこれをテストする正しい方法であるかどうかはわかりませんが、提案があればいいでしょう。

ありがとうございました。

4

1 に答える 1