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) 以及我想要的夹具和组件测试。

我的问题是关于 performancetest memory management:

  1. 在 describe 方法中实例化的变量会在 describe 中的所有测试完成后立即销毁吗?
  2. 我应该在 describe 中声明所有变量和 mock classes/services 吗?
  3. 我应该在 beforeEach 还是 beforeAll 中创建夹具?这样做,我的性能会有提升吗?

谢谢!

在我的项目中,我总是在单独的文件中创建模拟 类 和测试变量。在将它们导入我的规范文件后,我将它们声明到 beforeEach 块:

  1. 主要好处是在每个 IT 块之前它会重置其先前的值引用。
  2. 从内存中删除未使用的变量,从而提高性能。

希望对您有所帮助

我有第 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 }
]