crb

An irb console for cucumber world

Features

* Can define steps interactively
* Can execute steps interactively like debugger
* Can share cuke world and irb context in a same object
* Can see instance variables of step files via irb
* Supported hooks (but only before/after without parameters)
* Supported World methods

Usage

Use 'crb' command as same as 'cucumber' command
% crb (... cucumber options ...)

And then you are in cucumber world via irb

Example

% cd examples/i18n/en
% crb
irb(CRB:3):001:0>
       ^^^ This means a number of defined steps.

irb(CRB:3):001:0> Given "I have entered 3"
Undefined step: "I have entered 3"
=> #<Cucumber::Undefined: Undefined step: "I have entered 3">

irb(CRB:3):002:0> Given "I have entered 3 into the calculator"
=> [3]

irb(CRB:3):003:0> Given "I have entered 5 into the calculator"
=> [3, 5]

irb(CRB:3):004:0> Then "I press add"
=> 8

irb(CRB:3):005:0> @calc
=> #<Calculator:0x7faa0a3e5218 @args=[3, 5]>

You can operate your variables directly .

irb(CRB:3):006:0> @calc.push 1
=> [3, 5, 1]

irb(CRB:3):007:0> Then "I press add"
=> 9

I18N

I18N keywords are also available.

% cd examples/i18n/ja
% crb
irb(CRB:3):001:0> 前提 "3 を入力"
=> [3]
irb(CRB:3):002:0> @calc
=> #<Calculator:0x7ff45ecdbc70 @args=[3]>

Custom

% mkdir my-project
% crb my-project
irb(CRB:0):001:0> Given "ab"
Undefined step: "ab"
=> #<Cucumber::Undefined: Undefined step: "ab">
irb(CRB:0):002:0> Given(/^(..)$/){|i| p "Two chars for you! #{i}"}
=> "/^(..)$/ is defined"
irb(CRB:1):003:0> Given "ab"
"Two chars for you! ab"

World Methods

Above crb(irb) context is a same object with cuke's world.
And there are following additional methods.

  * before : execute before hooks. returns message (String)
  * after  : execute after  hooks. returns message (String)
  * steps  : returns step definitions (Array[RbStepDefinition])
  * support: returns support code object (Runtime::SupportCode)
  * hooks  : returns hooks (Hash[type=>Array[RbHook]])
  * rb     : returns ruby language support object (RbLanguage)

Restricted

* Hooks are not called automatically because crb is free from
  scenarios. Otherwise if hooks are called in each invokes,
  we'll never succeed to "add" operation in above calculator.

* "before", "after" methods are the manual triggers for hooks.
  And "Ctl-C" is binded as "before" filter too.

* To implement CRB, there are many ugly codes that closely
  depend on cuke's internal structures like private methods
  and instance vars. So it'll break soon after cuke's update.

Environment

Tested on ruby-1.8.7, cucumber-1.0.0

Author

maiha@wota.jp