2016-05-16 4 views
1

Ich bin neu in JavaScript und ich habe kürzlich angefangen, automatisierte Tests mit Winkelmesser und Yadda zu schreiben, damit ich Gherkin verwenden kann. Allerdings habe ich festgestellt, dass nur Schritt Definitionen erscheinen nicht wiederverwendbar zu sein, das heißt, wenn ich die FunktionWiederverwendungsschrittdefinitionen mit Yadda und Winkelmesser, erforderliche Dateien durchlaufen

testMyWebAppRocks.feature 

laufen wird es die Schritte in

testMyWebAppRocks.steps.js 

jedoch definiert verwenden, kann es sein, dass ein mehrere der gleichen Schritte aus dieser Feature-Datei, wie

Given I am on the homepage 

, die in einer anderen Feature-Datei, wie

erscheint
testThisParticularPartOfMyWebAppRocks.feature 

und erfordert, dass die Schritte in der Schrittdefinition, die dieser Funktion entspricht, neu geschrieben werden. Offensichtlich ist dies nicht ideal, passt nicht zu DRY und für eine einseitige Web-App, die ziemlich komplex ist, könnten für viele Funktionen die gleichen Schritte erforderlich sein.

Gibt es also eine Möglichkeit, alle Schrittdefinitionen in eine Bibliothek zu laden und die Features für diese Bibliothek auszuführen? Was ist die beste Vorgehensweise, wenn man so etwas macht?

Offensichtlich muss ich nicht alle meine Szenarien in eine unmanageable Feature-Datei und ebenso mit den Schrittdefinitionen stopfen müssen. Ich möchte auch nicht immer denselben Code wiederholen müssen.

UPDATE

OK, so habe ich um diese einen Weg herausgefunden, durch meine Bibliotheken zusammen verbinden

var library = englishLibrary.library(); 
var firstSteps = require('./steps/first-steps')(library); 
var secondSteps = require('./steps/second-steps')(firstSteps); 
var yadda = Yadda.createInstance(secondSteps); 

jetzt Mein Problem ist, dass diese bald ziemlich hässlich, ist es möglich, dies in einer Schleife zu tun? Wenn ich glob verwenden könnte, müsste ich nicht über den Namen der Step-Definitionen Bescheid wissen, aber ich kenne JavaScript nicht gut genug, um zu wissen, wo ich anfangen soll.

Danke.

Antwort

0

Es gibt keinen bestimmten Grund, warum Sie nicht können.

Soweit JS betroffen ist, können Sie grundsätzlich jeden Wert übergeben, einschließlich der Weitergabe von Dingen an require Anrufe.

Ob dies eine "gute" Struktur ist oder nicht, ist irgendwie eine andere Frage überhaupt.

Es könnte hilfreich sein, für Sie zu beachten, dass, was Sie vorbei tatsächlich an die givenwhen usw. Methodenaufrufe Funktionen sind - Wenn Sie sich die gleiche Funktion immer und immer wieder finden vorbei, warum nicht nur die Funktion brechen Definitionen in eine ./lib/common_test_functions Bibliothek?

Statt:

Yadda.localisation.English.library() 
.given('I am on the homepage', function() { 
    // Code goes here 
}); 

Vielleicht:

var testUtils = require('./lib/common_test_functions.js') 
Yadda.localisation.English.library() 
.given('I am on the homepage',testUtils.verifyHomePage) 

Es gibt nichts zu sagen Sie anonyme Funktionen als Rückrufe geben -have- zu - Sie die Funktionen definieren können, wo immer Sie wollen, und Pass sie in, wie Sie sie brauchen.

Man könnte sogar so etwas wie:

function myGivenWrapper(yaddaInstance,testText,testFunction){ 
    yaddaTestLib.given(testText,testFunction) 
} 
var yadda = Yadda.localisation.English.library() 
myGivenWrapper(yadda,testUtils.homepage.givenText,testUtils.homepage.test) 

JS Ihnen viel Ausdruckskraft verleiht nur irgendwie Funktion Shuffle ruft um aber Sie wollen - Wenn jemand lib scheint nicht architected Dinge zu haben In einer Weise, die für Ihren Anwendungsfall sinnvoll ist, können Sie Wrapper-Funktionen immer schreiben und eine "bessere" Schnittstelle implementieren.

0

Genau dies tun ...

var libraries = [ 
    require('./lib/hospital-library'), 
    require('./lib/patient-library'), 
    require('./lib/discharge-library') 
]; 

var yadda = Yadda.createInstance(libraries); 
Verwandte Themen