2015-02-11 115 views
1

我真的希望这是一个微不足道的问题。是的,我有RTFM。我实际上使用Angular记录的方式来注入控制器,但由于某种原因,我的控制器没有定义。这里的主要区别是,我习惯于单模块应用程序,这次我有一个多模块应用程序。我不认为这会有所作为,但你去。而是一个漫长的描述,我会直奔代码:如何将角度控制器注入我的单元测试

采用了棱角分明1.2.16

单元测试框架:茉莉花

app.js

angular.module('OBB', [ 
    // Native AngularJS DI 
    'ngResource', 'ngCookies', 

    // bunch of modules 
    ... 

    // OBB Page Modules 
    'OBB.home', 'OBB.buckets', 'OBB.company', 'OBB.advSearch', 'OBB.users' 
]) 

所以,我试图在OBB.home模块中测试一个控制器。

home.js

angular.module('OBB.home', ['ui.router']) 
.controller('HomeCtrl', ['$log', '$rootScope', '$scope', '$state', 'AUTH_EVENTS', 
    function HomeCtrl ($log, $rootScope, $scope, $state, AUTH_EVENTS) { 
    $scope.signInFormData = { 
     email: null, password: null 
    }; 
    //more code... 
}]); 

home.spec.js

describe('Unit Home Controllers: ', function() { 

    var homeController, scope; 

    beforeEach(module('OBB.home')); 

    beforeEach(inject(function (_$rootScope_, $controller) { 
     scope = _$rootScope_.$new(); 
     homeController = $controller('HomeCtrl', { 
     $rootScope: _$rootScope_, 
     $scope: scope, 
     $log: {}, 
     $state: {}, 
     AUTH_EVENTS: {}, 
     }); 
    })); 

    it('Home Controller is correctly instantiated', inject(function() { 
    expect(scope).toBeDefined(); // Pass 
    expect(scope.signInFormData).toBeDefined(); // Fails 
    })); 
}); 

回答

0

您需要模拟/加载的依赖。

describe('Unit Home Controllers: ', function() { 

    var homeController, scope; 

    beforeEach(module('OBB.home')); 

    beforeEach(inject(function (_$rootScope_, $controller) { 
     scope = _$rootScope_.$new(); 
     homeController = $controller('HomeCtrl', { 
     $rootScope: _$rootScope_, 
     $scope: scope, 
     $log: {}, //You will have to add methods as needed 
     $state: {}, 
     AUTH_EVENTS: {} 
     }); 
    })); 

    it('Home Controller is correctly instantiated', inject(function() { 
    expect(scope).toBeDefined(); // Fails 
    expect(scope.signInFormData).toBeDefined(); // Fails 
    })); 
}); 
+0

这不适合我。即使确保函数参数列表匹配后,我仍然得到一个未定义的控制器。最令人沮丧的是,没有任何错误信息,甚至给我一些可能出错的提示。这只是未定义的。我不确定是否有嵌套的错误,因为模块也有相关的服务。我要通过控制器并开始评论一切,并慢慢打开它,看看是否有帮助。 – 2015-02-11 16:25:15

+0

更新我的代码以显示您的添加。谢谢! – 2015-02-11 16:27:22