2016-06-10 2 views
1

Ich implementiere ein CucumberJS-Szenario, das mehrere Schritte über zwei verschiedene Schrittdefinitionsdateien verwendet. Der erste Schritt setzt einige Variablen auf der Welt, die von einem Schritt in der anderen Schrittdefinitionsdatei verwendet werden müssen.Wie teile ich meine World-Instanz über mehrere Schrittdefinitionsdateien in CucumberJS?

Die Variable wird korrekt gesetzt, aber wenn der Schritt in der anderen Datei versucht, sie zu lesen, ist sie undefiniert. Irgendwelche Ideen, wie man das löst, abgesehen davon, dass die Schrittdefinitionsdateien zusammengeführt werden?

Beispiel:

world.js

var World = function World() { 
    this.client = ''; 
}; 

module.exports.World = World; 

test.feature

Given a variable A 
Then some other step 

step1.steps.js

module.exports = function() { 
    this.World = require(process.cwd() + '/test/features/support/world').World; 

    this.Given(/^a Variable A$/, function() { 
     this.client = 'abc'; 
    }); 
}; 

step2.steps.js

module.exports = function() { 
    this.World = require(process.cwd() + '/test/features/support/world').World; 

    this.Then(/^some other step$/, function() { 
     console.log(this.client); 
    }); 
}; 

Antwort

1

Sie setzen this.client statt this.World.client.

world.js

module.exports = { 
    client: '' 
}; 

step1.steps.js

var world = require('./test/features/support/world.js'); 

module.exports = function() { 
    this.Given(/^a Variable A$/, function() { 
     world.client = 'abc'; 
    }); 
}; 

step2.steps.js

var world = require('./test/features/support/world.js'); 

module.exports = function() { 
    this.Then(/^some other step$/, function() { 
     console.log(world.client); 
    }); 
}; 
+0

: Darüber hinaus sollten Sie ein Objekt und nicht einen Konstruktor in world.js verwenden Das hat tatsächlich funktioniert, obwohl es sich von der offiziellen Dokumentation unterscheidet. Danke! – Dragnipur

+0

@Florent B. https://stackoverflow.com/questions/48297950/cumberjs-how-to-use-worldconstructor-across-different-features – Valay

+0

@Florent B. wie man den gleichen Wert für 'Date.now()' erhält über verschiedene Funktionen? – Valay

0

Sie können direkt Ihre test.feature parametrisieren:

Given a variable "abc" 
    Then some other step 

nun diese Variable in Ihrem Schritt passieren

step1.steps.js

module.exports = function() { 
    this.World = require(process.cwd() + '/test/features/support/world').World; 

this.Given(/^a Variable "([^"]*)"$/, function (variable) { 
    this.client = variable; 
}); 
}; 

step2.steps.js

module.exports = function() { 
this.World = require(process.cwd() + '/test/features/support/world').World; 

this.Then(/^some other step$/, function() { 
    console.log(this.client); // would print abc 
}); 
}; 
Verwandte Themen