gpt4 book ai didi

javascript - Angularjs ngMock 在每次测试之前或在每个测试用例上注入(inject)?

转载 作者:行者123 更新时间:2023-11-30 00:05:18 24 4
gpt4 key购买 nike

场景

我目前正在为一个 Angular 项目编写测试,几乎在我找到的每篇文章中,我都看到他们在 describe block 中创建 “全局” 变量,其中它们存储要在测试中使用的依赖项,如下所示:

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() {
// ...
})
})

我发现这是 ver DRY 因为它创建并共享服务/工厂/等的新实例.. 供测试使用。但是在编写大量测试时,我注意到我创建了全局变量,然后不再使用它们,并且忘记在 inject() 中删除它们,留下可能导致困惑的痕迹。

我的困惑

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

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 block 中注入(inject)依赖项是否有任何问题?

最佳答案

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

关于javascript - Angularjs ngMock 在每次测试之前或在每个测试用例上注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38759763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com