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