Dav*_*vey 11 testing angularjs karma-runner
我目前正在开发一个将角度JS集成到Rails应用程序中的教程.
测试设置如下:
describe( 'Club functionality', function() {
// mock Application to allow us to inject our own dependencies
beforeEach(angular.mock.module('league'));
// create the custom mocks on the root scope
beforeEach(angular.mock.inject(function($rootScope, _$httpBackend_, $state){
//create an empty scope
scope = $rootScope.$new();
// we're just declaring the httpBackend here, we're not setting up expectations or when's - they change on each test
scope.httpBackend = _$httpBackend_;
scope.$state = $state;
}));
afterEach(function() {
scope.httpBackend.verifyNoOutstandingExpectation();
scope.httpBackend.verifyNoOutstandingRequest();
});
...
Run Code Online (Sandbox Code Playgroud)
在完成教程的这一部分并浏览一些Angular文档后,我仍然不清楚为什么在包含$ httpBackend依赖项时使用下划线.为什么这样被嘲笑?scope.httpBackend = _$httpBackend_;
Ila*_*mer 13
为方便起见,我们希望在我们的应用程序中使用我们的测试套件中的服务/范围.所以我们需要在外部函数范围保存它们的引用.
首先我们需要注入它们,所以我们尝试这样做而没有像这样的下划线:
var $httpBackend;
beforeEach(angular.mock.inject(function( $httpBackend ){
Run Code Online (Sandbox Code Playgroud)
问题是内部函数作用域变量会$httpBackend影响外部函数作用域变量$httpBackend,因此我们不能通过作用域链来设置我们的引用.
要修复它,我们必须为内部和外部范围变量指定不同的名称.下划线只是一点点的帮助从$美注射器做到没有痛苦.
免责声明:我没有写这个答案.它是从这里复制的.
因此,"秘密"的关键在于:https: //github.com/angular/angular.js/blob/master/src/auto/injector.js#L57
$injector在检查函数的参数(检索依赖关系)时,基本上会删除前导/尾随下划线.这是有用的技巧,因为我们可以做$rootScope = _$rootScope_;,然后,在测试后期使用$rootScope.它看起来更好看,因为测试代码使用与控制器使用的相同的变量.以某种方式有领先$有助于记住那些是注入变量.当然我们可以做到:
rootScope = $rootScope;但注入rootScope并不是那么明显.
| 归档时间: |
|
| 查看次数: |
5423 次 |
| 最近记录: |