A wire protocol server for cucumber-ruby that executes steps defined in Lua
-
Install Lua 5.2
-
Install cucumber-lua using luarocks:
luarocks build https://raw.github.com/cucumber/cucumber-lua/master/cucumber-lua-0.0-2.rockspec
- Install Ruby, cucumber-ruby and the wire protocol gem.
Create a Gemfile
source 'https://rubygems.org'
gem "cucumber"
gem "cucumber-wire"
Then ask Bundler to install the gems:
bundle install
Add a file to load the wire protocol plugin:
echo "require 'cucumber/wire'" > features/support/wire.rb
- Add a .wire file telling cucumber that Lua is listening:
host: 0.0.0.0
port: 9666
Run the cucumber-lua server:
cucumber-lua
Then run cucumber in another terminal:
bundle exec cucumber
cucumber-lua expects you to define a single file for step definitions (features/step_definitions/steps.lua). If you need anything more than a single file, use lua modules and require them from your main steps file (that means we don't need luafilesystem).
Create your step definitions using the following global keywords:
Before(fn)
- called before each scenarioAfter(fn)
- called after each scenarioGiven(step, fn)
- define a step where a pre-condition/state is declaredWhen(step, fn)
- define a step where user action or behaviour is performedThen(step, fn)
- define a step where the outcome is observedPending(message)
- indicate a step as pending implementation
Note: If a Before
or After
function fails the whole scenario is reported as failed.
Calculator = require("calculator")
Before(function()
Calculator:Reset()
end)
After(function()
print("I am called after each scenario")
end)
Given("I have entered (%d+) into the calculator", function (number)
Calculator:Enter(number)
end)
When("I press add", function ()
Calculator:Add()
end)
Then("the result should be (%d+) on the screen", function (number)
assert(Calculator.result == tonumber(number),
"Expected " .. number .. ", was " .. Calculator.result)
end)
Then("Something not yet implemented", function ()
Pending("It's not ready yet")
end)
lua spec/runner.lua