0.4.3 • Published 10 years ago

cucumber-sweetener v0.4.3

Weekly downloads
3
License
ISC
Repository
github
Last release
10 years ago

cucumber-sweetener

A small extension for cucumber-js that sweetens your steps with promises and timeouts. No more callbacks!

Sweet as a cucumber

Without cucumber-sweetener, you have to handle callbacks manually, even if you use an API which returns promises:

this.Then(/^the user '([^']*)' and the user '([^']*)' should be connected$/, 
function(id1, id2, callback) {
	var user1 = this.getUser(id1).waitForConnection();
	var user2 = this.getUser(id2).waitForConnection();
	q.all([user1, user2]).then(function() {
		callback();
	}).fail(function(error) {
		callback.fail(error);
	});
});

With sweet steps, if you don't want to call your callbacks manually, you don't have to. You can simply return a promise - this extension will call the appropriate callbacks for you:

Then(/^the user '([^']*)' and the user '([^']*)' should be connected$/, function(id1, id2) {
	var user1 = this.getUser(id1).waitForConnection();
	var user2 = this.getUser(id2).waitForConnection();
	return q.all([user1, user2]);
});

What happens when a promise will not be resolved? With pure cucumber-js, the execution would hang infinitely. With sweet steps, you can specify a timeout for the step execution time if you want:

Then(/^the user '([^']*)' and the user '([^']*)' should be connected$/, function(id1, id2) {
  ...
}, {timeout: 5000}); // No more hanging tests! After 5 seconds this step would fail.

Installation

Install it with npm:

npm install cucumber-sweetener

Usage

Create a JavaScript file as a support file under the support subfolder. Files under the support subfolder are always loaded first by cucumber-js. So if you load this extension here, you can use the sweet steps throughout your project. For example if you have a support file containing your event hooks, you can insert the following code to setup cucumber-sweetener:

var sweetener = require('cucumber-sweetener');

var eventHooks = function () {
  sweetener.sweeten(this, {timeout: 1000});// global timeout for steps where are no timeout
  
  // after you called .sweeten(), you can use the supported sweetened steps
  After(function() {
    return this.somePromise();
	}, {timeout: 4000});
}

Supported steps

  • Given, When, Then
  • Before, After
0.4.3

10 years ago

0.4.2

10 years ago

0.4.1

10 years ago

0.4.0

10 years ago

0.3.1

10 years ago

0.3.0

10 years ago

0.2.0

10 years ago

0.1.1

10 years ago

0.1.0

10 years ago