code: function(step, deferred) {
  
        this.currentStep = step;
        delete this.stepSkipped;
        delete this.skipMessage;
  
        // The step description object is passed to all step events; it contains
        // the name of the step that is being executed.
        var description = { name: step.name },
            stepArgs = slice.call(arguments, 2);
  
        // **EVENT:** the `step:start` event is emitted before each step starts executing
        // with the step description object and the step arguments.
        this.emit.apply(this, [ 'step:start', description ].concat(stepArgs));
  
        // The step definition function is called with this scenario as the context
        // and with the step arguments. This is done with the q library so a promise
        // is returned and any errors are handled by the promise chain.
        var stepResult = q.fapply(_.bind(step.definition, this), stepArgs);
  
        // `#handleStepResult`  is called if the promise is resolved, `#handleStepError` otherwise.
        stepResult.then(_.bind(this.handleStepResult, this, deferred, description), _.bind(this.handleStepError, this, deferred, description));
      }
docs: ### #runStep(step, deferred, stepArgs...) Runs the specified step.  The second argument is the deferred object that must be resolved or rejected to complete the scenario.  The remaining arguments should be passed to the step definition function.