Karma + Jasmine(Angular 测试):我应该在哪里定义 mock 类 和测试变量?
Karma + Jasmine (Angular Testing): Where should I define mock classes and test variables?
举个例子:
const listDefinition: any = {
module: "module",
service: "service",
listname: "listname"
};
@Component(...)
class MockTreeExpanderComponent extends TreeExpanderComponent {...}
class MockListConfigurationsService extends ListConfigurationsService {...}
describe('ColumnsListConfigurationsComponent Test cases', () => {
let fixture: ComponentFixture<ColumnsListConfigurationsComponent>;
let component: ColumnsListConfigurationsComponent;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [
ComponentToTest,
MockTreeExpanderComponent
],
providers: [
{ provide: TreeListConfigurationService, useClass: MockTreeListConfigurationService }
]
});
fixture = TestBed.createComponent(ComponentToTest);
component = fixture.componentInstance;
component.listDefinition = listDefinition;
fixture.detectChanges();
});
});
如您所见,我有一个 Mock 组件 (MockListViewerGridComponent
) 和服务 (ListConfigurationsService
)、一个配置变量 (listDefinition
) 以及我想要的夹具和组件测试。
我的问题是关于 performance
和 test memory management
:
- 在 describe 方法中实例化的变量会在 describe 中的所有测试完成后立即销毁吗?
- 我应该在 describe 中声明所有变量和 mock classes/services 吗?
- 我应该在
beforeEach
还是 beforeAll
中创建夹具?这样做,我的性能会有提升吗?
谢谢!
在我的项目中,我总是在单独的文件中创建模拟 类 和测试变量。在将它们导入我的规范文件后,我将它们声明到 beforeEach
块:
- 主要好处是在每个
IT
块之前它会重置其先前的值引用。
- 从内存中删除未使用的变量,从而提高性能。
希望对您有所帮助
我有第 3 点的答案
让我与 beforeAll
分享我自己的经验。
我们在我们的一个应用程序中使用了 beforeEach
夹具创建,这花费了将近 12 分钟来构建整个应用程序。对于 each unit of work
.
我们必须构建应用程序
1st time client side
2nd time on review branch
和
3rd time release branch
几乎 30 min
(加起来)提交 unit of work
。
这次 head count of resources
,宾果游戏,作为一个团队,我们在应用程序构建过程中浪费了很多时间。
在某些时候,我们在 this article 的帮助下将 beforeEach
替换为 beforeAll
,并且成功了。我们能够将构建时间减少大约 80%。
第 1 点和第 2 点的简短回答
1) 是
2) 最好创建单独的模拟服务。
您可以借助 before all 块中的存根提供它的对象,并将所有模拟保存在同一文件夹中。
providers: [
{ provide: XService, useClass: XServiceStub }
]
举个例子:
const listDefinition: any = {
module: "module",
service: "service",
listname: "listname"
};
@Component(...)
class MockTreeExpanderComponent extends TreeExpanderComponent {...}
class MockListConfigurationsService extends ListConfigurationsService {...}
describe('ColumnsListConfigurationsComponent Test cases', () => {
let fixture: ComponentFixture<ColumnsListConfigurationsComponent>;
let component: ColumnsListConfigurationsComponent;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [
ComponentToTest,
MockTreeExpanderComponent
],
providers: [
{ provide: TreeListConfigurationService, useClass: MockTreeListConfigurationService }
]
});
fixture = TestBed.createComponent(ComponentToTest);
component = fixture.componentInstance;
component.listDefinition = listDefinition;
fixture.detectChanges();
});
});
如您所见,我有一个 Mock 组件 (MockListViewerGridComponent
) 和服务 (ListConfigurationsService
)、一个配置变量 (listDefinition
) 以及我想要的夹具和组件测试。
我的问题是关于 performance
和 test memory management
:
- 在 describe 方法中实例化的变量会在 describe 中的所有测试完成后立即销毁吗?
- 我应该在 describe 中声明所有变量和 mock classes/services 吗?
- 我应该在
beforeEach
还是beforeAll
中创建夹具?这样做,我的性能会有提升吗?
谢谢!
在我的项目中,我总是在单独的文件中创建模拟 类 和测试变量。在将它们导入我的规范文件后,我将它们声明到 beforeEach
块:
- 主要好处是在每个
IT
块之前它会重置其先前的值引用。 - 从内存中删除未使用的变量,从而提高性能。
希望对您有所帮助
我有第 3 点的答案
让我与 beforeAll
分享我自己的经验。
我们在我们的一个应用程序中使用了 beforeEach
夹具创建,这花费了将近 12 分钟来构建整个应用程序。对于 each unit of work
.
我们必须构建应用程序
1st time client side
2nd time on review branch
和
3rd time release branch
几乎 30 min
(加起来)提交 unit of work
。
这次 head count of resources
,宾果游戏,作为一个团队,我们在应用程序构建过程中浪费了很多时间。
在某些时候,我们在 this article 的帮助下将 beforeEach
替换为 beforeAll
,并且成功了。我们能够将构建时间减少大约 80%。
第 1 点和第 2 点的简短回答
1) 是
2) 最好创建单独的模拟服务。 您可以借助 before all 块中的存根提供它的对象,并将所有模拟保存在同一文件夹中。
providers: [
{ provide: XService, useClass: XServiceStub }
]