设想
我目前正在为一个 Angular 项目编写测试,几乎在我找到的每一篇文章中,我都看到他们在一个块中创建“全局”变量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() {
// ...
})
})
我发现这是非常干燥的,因为它创建并共享了服务/工厂/等的新实例。供测试使用。但是在编写大量测试时,我注意到我创建了全局变量然后不再使用它们,并且忘记在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
每个测试而不是在块内注入依赖项有什么问题吗?