wake-up-neo.com

Karma + Jasmin (Angular Testing): Wo soll ich Scheinklassen und Testvariablen definieren?

Nehmen wir das folgende Beispiel:

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();
    });
});

Wie Sie sehen, habe ich eine Mock-Komponente (MockListViewerGridComponent) und einen Service (ListConfigurationsService), eine Konfigurationsvariable (listDefinition) und das Gerät und die Komponente, die ich testen möchte.

Meine Frage betrifft performance und test memory management:

  1. Die in der Methode description instanziierten Variablen werden gelöscht, sobald alle Tests in der Beschreibung abgeschlossen sind.
  2. Soll ich alle Variablen und Scheinklassen/Services innerhalb von beschreiben deklarieren?
  3. Soll ich ein Fixture in beforeEach oder beforeAll erstellen? Wenn ich das tue, werde ich die Leistung verbessern.

Vielen Dank!

8
Ricardo Rocha

Ich habe eine Antwort für Punkt 3

lassen Sie mich meine eigenen Erfahrungen mit dem beforeAll teilen.

Wir haben die beforeEach Fixture-Erstellung in einer unserer Anwendungen verwendet, die fast 12 Minuten dauerte, um die gesamte App zu erstellen. Für each unit of work.

wir müssen die App erstellen 

1st time client side 

2nd time on review branch und 

3rd time release branch 

die fast 30 min (kombiniert) brauchten, um unit of work zu übergeben. 

Jetzt mehrfach mit dem head count of resources, Bingo als Team, verschwendeten wir viel Zeit nur im App-Build-Prozess.

irgendwann ersetzten wir beforeEach durch beforeAll mithilfe von diesem Artikel , und es hat funktioniert. Wir konnten die Bauzeit um rund 80% reduzieren. 

Kurze Antworten für Punkt 1 und 2

1) ja

2) Es ist besser, einen separaten Mock-Service zu erstellen. Sie können das Objekt davon mithilfe von stub in Ihrem vor allen Block erstellen und alle Mocks im selben Ordner aufbewahren.

providers: [
      { provide: XService, useClass: XServiceStub }
]
3
Kedar9444

In meinen Projekten erstelle ich Scheinklassen und Testvariablen in der separaten Datei. Und nachdem ich sie in meine spec-Datei importiert habe, deklariere ich sie zum beforeEach-Block:

  1. Der Hauptvorteil besteht darin, dass vor jedem IT-Block die vorherige Wertreferenz zurückgesetzt wird.
  2. Nicht verwendete Variablen werden aus dem Speicher entfernt, was zu einer Leistungsverbesserung führt.

Ich hoffe das hilft

1
siddharth shah