2016-06-27 10 views
0

Ich habe eine Reihe von Tests in einer Suite, die ich über viele Seitenobjekte hinweg ausführen möchte. Ich habe versucht, ein Testobjekt wie unten zu bauen, außer dass es nur das erste ausführt.Verschachtelung von Tests in einer einzigen Nightwatch-Testsuite zur Verwendung mehrerer Vorbezeichnungen

module.exports = { 
    'test1': { 
    before: function() { console.log('before1'); }, 
    'test 1a': function() { console.log('test1a'); } 
    }, 
    'test2': { 
    before: function() { console.log('before2'); }, 
    'test 1a': function() { console.log('test2a'); } 
    } 
}; 

Ist es möglich, diese Art von Verschachtelung in einer Testsuite durchzuführen? Der tatsächliche Verwendung Fall ich erreichen möchte ist wie folgt:

['page1', 'page2'].forEach(page => { 
    this[`Do something on ${page}`] = { 
    before: client => { 
     client.page[page].navigate(); 
    }, 
    'it does something': client => { 
     client.page[page]().expect.section('@element').visible; 
    } 
} 

wo ich dynamische Testsuiten bauen will, dass die gleichen Tests auf vielen „Seite“ Objekten ausgeführt werden.

UPDATE: Ich möchte wirklich den Nightwatch Runner verwenden, anstatt einen anderen Läufer wie Mocha zu verwenden, der diese Funktionalität tatsächlich hat.

+0

ich nicht denke, es ist ein gutes Design, sollten wir den Testfall trennen s, mach es. In jedem Testfall, den ich getan habe, sind sie eine Menge Seite-Objekt in Vorher/Nachher erforderlich (Vorbedingung und saubere Sachen nach dem Test) .So besser machen es so einfach wie möglich –

Antwort

0

Um dies zu erreichen, müssen Sie die nightwatch.json Config ändern andere Testläufer in diesem Fall Mokka zu verwenden, um mehr Flexibilität zu haben:

"test_runner" : { 
"type" : "mocha", 
"options" : { 
    "ui" : "bdd", 
    "reporter" : "spec" 
} 
} 

und dann können Sie Ihre Tests wie folgt schreiben:

describe('describe', function() { 

    before(function(cl, done) { 
    ng = ng({client: cl, screen: 'rounding'}); 
    client = cl; 

    console.log('before1') 

    done(); 
    }); 

    after(function(client, done) { 
    if (client.sessionId) { 

     client 
     .pause(1999) 
     .end(function() { 
      done(); 
     }); 
    } else { 
     done(); 
    } 
    }); 

    afterEach(function(client, done) { 
    done(); 
    }); 

    beforeEach(function(client, done) { 
    done(); 
    }); 

    describe('describe nested', function() { 
    before(function (client, done) { 
     console.log('before before!') 
     done(); 
    }); 

    it('expectation', function (client) { 
     goToRoundingPage(client); 
     client.pause(111); 
    }); 
    }); 
}); 

Wie Sie mit diesem testrunner sehen Sie können Nest die Tests die Zeiten, die Sie wünschen und Unterstützung verschachtelt befores/nach etc

+0

Ich wollte Mokka vermeiden, wie das ist, was ich verwendet habe ursprünglich, aber Sie verlieren einige andere Nightwatch-Funktionalität, wenn Sie dies tun, so haben sich zurückgewählt. Ich hatte gehofft, Nightwatch Runner würde dich lassen, aber es tut es nicht. Ich werde meine Fragen aktualisieren und angeben, dass ich keinen anderen Läufer verwenden möchte. Vielen Dank! –

+0

Ok, kein Problem und ja, ich denke daran, auch zum Nightwatch-Läufer zurückzukehren, weil der Reporter nicht alle bestandenen Behauptungen in Mokka zeigt – deividsito

+0

@ Matt-Derrick, fügen Sie bitte in Ihrem Edit das Wort "Updated" hinzu und fügen Sie das Datum hinzu um meine Frage nicht zu entkräften. – deividsito