Angularjs ngMock 在每次测试之前或在每个测试用例上注入?
Angularjs ngMock inject before each test or on each test case?
场景
我目前正在为一个 Angular 项目编写测试,几乎在我找到的每篇文章中,我都看到他们在 "global" describe
块,它们存储要在测试中使用的依赖项,如下所示:
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() {
// ...
})
})
我发现它非常干,因为它创建并共享了一个 service/factory/etc.. 的新实例供测试使用。但是在编写大量测试时,我注意到我创建了全局变量,然后不再使用它们,并且忘记在 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
}))
})
恕我直言,这还有一个额外的好处,那就是事物保持在本地,而不必使用必须搜索它们来自何处的变量。
问题
在每个测试而不是在 beforeEach
块中注入依赖项是否有任何问题?
不,没有这样的问题你可以根据你的要求添加依赖项唯一的问题是效率,因为它必须多次加载同一个文件。当编写少量测试用例时,这个问题不是什么大问题,但是当您开始编写更多测试用例时,它最终会变慢。此外,您每次注入的模块可能依赖于其他模块,因此必须将这些模块加载到 memory.That 中,这就是为什么首选将这些值用作全局变量的原因。
场景
我目前正在为一个 Angular 项目编写测试,几乎在我找到的每篇文章中,我都看到他们在 "global" describe
块,它们存储要在测试中使用的依赖项,如下所示:
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() {
// ...
})
})
我发现它非常干,因为它创建并共享了一个 service/factory/etc.. 的新实例供测试使用。但是在编写大量测试时,我注意到我创建了全局变量,然后不再使用它们,并且忘记在 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
}))
})
恕我直言,这还有一个额外的好处,那就是事物保持在本地,而不必使用必须搜索它们来自何处的变量。
问题
在每个测试而不是在 beforeEach
块中注入依赖项是否有任何问题?
不,没有这样的问题你可以根据你的要求添加依赖项唯一的问题是效率,因为它必须多次加载同一个文件。当编写少量测试用例时,这个问题不是什么大问题,但是当您开始编写更多测试用例时,它最终会变慢。此外,您每次注入的模块可能依赖于其他模块,因此必须将这些模块加载到 memory.That 中,这就是为什么首选将这些值用作全局变量的原因。