it-swarm.com.de

Wie vor / nach jedem in Jasmine JS wiederverwenden?

Beim Schreiben von Tests mit JasmineJS habe ich viele Tests, die einen ähnlichen Vorher-Nachher-Code haben.

Gibt es eine Möglichkeit, ein Vererbungsmodell mit JasmineJS-Testsuiten zu implementieren?

Ich kann alle Tests in einem einzigen describe gruppieren, aber in diesem Fall werde ich mit einer einzigen riesigen JS-Datei enden, die alle Tests enthält.

Ich möchte die Tests für jede Seite aufteilen.

Hier ist ein Beispiel:

describe('Services Page', function() {

    beforeEach(function() {
        login_as_admin()
    })

    beforeEach(function() {
        browser().navigateTo('/services')
    })

    if('Some test for services page', function() {})

    afterEach(function() {
        logout()
    })

})


describe('Administrators Page', function() {

    beforeEach(function() {
        login_as_admin()
    })

    beforeEach(function() {
        browser().navigateTo('/administrators')
    })

    if('Some test for administrators page', function() {})

    afterEach(function() {
        logout()
    })

})
38
Adi Roiban

Ich denke, dass dies teilweise untersucht wird in diesem Blog-Beitrag und auch hier beantwortet , aber ich füge eine angepasste Antwort für Ihr Beispiel hinzu:

Wiederverwendbarer Code:

function sharedSetup(startPage) {
    beforeEach(function() {
        login_as_admin();
        browser().navigateTo(startPage);
    });

    afterEach(function() {
        logout();
    });
};

Wie man es benutzt:

describe('Services Page', function() {
    sharedSetup('/services');

    it('Some test for services page', function() {});
});

describe('Administrators Page', function() {
    sharedSetup('/administrators');

    it('Some test for administrators page', function() {});
});
37
Leo Gallucci

Wenn Sie dies für alle Ihre Suiten tun möchten, können Sie eine beforeEach - oder afterEach -Funktion in topSuite registrieren:

jasmine.getEnv().topSuite().beforeEach({fn: function() {
   //log in as admin
}});

Wenn Sie es nur auf einige Suiten anwenden möchten, können Sie mit Untersuiten arbeiten:

describe("as_admin", function() {
  beforeEach(function() {
    //log in as admin
  });

  describe('Services Page',function() {...});
  describe('Administrators Page',function() {...});

}
18
Steven

Mit Jasmine können Sie beforeEach und afterEach außerhalb eines describe -Aufrufs platzieren. Auf diese Weise können Sie für alle Ihre Spezifikationen globales Setup und Teardown durchführen. Ihr logout() -Aufruf scheint ein guter Kandidat für den globalen Abbau zu sein, und wenn Sie sich mit allen Angaben als Administrator anmelden, können Sie dies auch auf den globalen Bereich übertragen.

Für Dinge, die in einigen, aber nicht allen Spezifikationen verwendet werden, scheint eine Methode wie Ihre login_as_admin() der beste Weg zu sein, um diese Logik an einem Ort zu konsolidieren.

3
Gregg

Referenz: ( Pivotal Labs-Blog: Davis W. Frank )

Er beschreibt das Sammeln gemeinsamer Funktionen in einer Funktion, die mit Parametern für die verschiedenen einzelnen Suites aufgerufen wird. Durch Aufrufen dieser Funktion in jeder Suite werden die allgemeinen Einstellungen/Konfigurationen ausgeführt.

Aufteilen von Tests auf mehrere Dateien; Die Datei mit der gemeinsam genutzten Funktion kann entweder auf jeder Seite mit einem <script> - Tag versehen werden, wenn die Tests browserbasiert sind, oder mit einem require(...) im oberen Bereich, wenn die Tests knotenbasiert sind. Sie können die Tests dann unabhängig voneinander ausführen, jedoch mit dem gemeinsam genutzten Setup, das nur einmal definiert wurde.

0
xst