Angularjs ngMock在每次测试之前或每个测试用例上注入?

时间:2016-08-04 06:15:58

标签: javascript angularjs unit-testing ngmock

方案

我目前正在为Angular项目编写测试,几乎在我找到的每篇文章中,我都看到他们在{{1}中创建了" global" 变量} block,它们存储要在测试中使用的依赖项,如下所示:

describe

我发现这是ver DRY,因为它创建并共享服务/工厂/等的新实例以供测试使用。但是在编写大量测试时,我注意到我创建了全局变量然后不再使用它们,并且忘记在describe('Some tests', function() { var $controller, $rootScope beforeEach(angular.mock.module('myApp')) beforeEach(angular.mock.inject(function(_$controller_, _$rootScope_) { $controller = _$controller_ $rootScope = _$rootScope_ })) it('uses $controller inside', function() { // ... }) it('uses $rootScope inside', function() { // ... }) }) 中删除它们,留下这些可能导致混乱的痕迹。

我的困惑

所以我一直在为每个测试用例注入依赖项,然后在小inject()块中重构为不会失控的全局变量,如下所示:

describe

这有一个额外的好处,就是保持本地的东西,而不必使用必须搜索它们来自的地方的变量,恕我直言。

问题

在每个测试中注入依赖项而不是describe('Some tests', function() { beforeEach(angular.mock.module('myApp')) it('uses $controller inside', angular.mock.inject(function($controller) { // Test using the $controller })) it('uses $rootScope inside', angular.mock.inject(function($rootScope) { // Test using $rootScope })) }) 块内是否存在任何问题?

1 个答案:

答案 0 :(得分:1)

不存在这样的问题,您可以根据您的要求添加依赖项,唯一的问题是效率,因为它必须多次加载相同的文件。在编写少量测试用例时,这个问题并不是什么大问题,但是当你开始编写更多测试用例时,它最终会变慢。此外,您每次注入的模块可能依赖于其他模块,因此必须将这些模块加载到内存中。这就是为什么最好将这些值用作全局变量。