使用controllerAs测试角度控制器

时间:2015-03-26 19:07:30

标签: angularjs jasmine protractor

我已经慢慢更新了一个准备好进行2.0迁移的角度应用,当它发布时我遇到了更新我的规格的问题。主要的问题是我已经开始使用控制器作为语法并完全从我的控制器中移除范围,但现在我在监视服务时遇到了问题,而这些服务是在这个'这个'在控制器内部。

我在控制器代码和规范下复制。我把它弄得很失败,所以我们可以轻松地尝试解决这个问题。

控制器:

var LoginCtrl;

LoginCtrl = (function() {

  function LoginCtrl(Auth, $state, Session) {
    this.Auth = Auth;
    this.$state = $state; 
    this.Session = Session;

    this.credentials = {
      username: undefined,
      password: undefined,
      email: undefined
    };
  }

  LoginCtrl.prototype.login = function () {
    var _self = this;
    this.Auth.login(this.credentials).then(function(response) {
      console.log(response)
    }, function(error) {
      console.log(error)
    });
  };

  return LoginCtrl;

})();

angular.module('projectx').controller('LoginCtrl', ['Auth', '$state', 'Session', LoginCtrl]);

规格:

describe('Controller: LoginCtrl', function () {

  var $controller, Auth;
  beforeEach(module('projectx'));

  beforeEach(inject(function(_$controller_, _Auth_) {
    $controller = _$controller_;
    Auth = _Auth_;
  }));

  it('should pass user credentials to server to log you in', function() {
    var scope = {};

    var login = $controller('LoginCtrl as login', {$scope: scope});
    expect(scope.login).toBe(login);
    spyOn(scope.login.Auth, 'login');

    scope.login.credentials = {
      username: 'test',
      password: 'test'
    };

    scope.login.login();
    expect(scope.login.Auth.login).toHaveBeenCalledWith({username: 'test', password: 'test'});
  });

});

我得到的错误是未定义的'当控制器试图调用this.Auth.login因为我的规范正在监视(scope.login.Auth,' login')这是一个单独的实例我认为?下面是实际错误:

PhantomJS 1.9.8(Mac OS X)控制器:LoginCtrl应将用户凭据传递给服务器以使用FAILED登录     TypeError:' undefined'不是一个对象(评估' this.Auth.login(this.credentials)。然后')         在/app/controllers/login.js:25         在/spec/controllers/login.js:49

0 个答案:

没有答案