#
cp.spec.Scenario
A Definition which describes a specific scenario.
A Scenario
is most typically created via the it function, like so:
local spec = require "cp.spec"
local describe, it = spec.describe, spec.it
local Rainbow = require "my.rainbow"
return describe "a rainbow" {
it "has seven colors"
:doing(function()
local rainbow = Rainbow()
assert(#rainbow:colors() == 7, "the rainbow has seven colors")
end)
}
Scenarios can be run asynchronously via the Run.This instance passed to the doing
function.
To indicate a scenario is asynchronous, call this:wait()
, then call
this:done()
, to indicate it has completed. Any assert
call which fails will
result in the run failing, and stop at that point.
For example:
return describe "a rainbow" {
it "has a pot of gold at the end"
:doing(function(this)
this:wait()
local rainbow = Rainbow()
rainbow:goToEnd(function(whatIsThere)
assert(whatIsThere:isInstanceOf(PotOfGold))
this:done()
end)
end)
}
Definitions can also be data-driven, via the
return describe "a rainbow" {
it "has ${color} at index ${index}"
:doing(function(this)
local rainbow = Rainbow()
assert(rainbow[this.index] == this.color)
end)
:where {
{ "index", "color" },
{ 1, "red" },
{ 2, "orange" },
{ 3, "yellow" },
{ 4, "blue" },
{ 5, "green" },
{ 6, "indigo" },
{ 7, "violet" },
},
}
This will do a run for each variation and interpolate the value into the run name for each.
Note: "where" parameters will not override built-in functions and fields in the this instance (such as "async" or "done") so ensure that you pick names that don't clash.
#
API Overview
Constructors - API calls which return an object, typically one that offers API methods
Scenario
Methods - API calls which can only be made on an object returned by a constructor
doing run where