#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 where method:

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

Methods - API calls which can only be made on an object returned by a constructor


#API Documentation

#Constructors

Signaturecp.spec.Scenario(name[, testFn]) -> cp.spec.Scenario
TypeConstructor
DescriptionCreates a new Scenario with the specified name.
Parameters
  • name - The name of the scenario.
  • testFn - (optional) The function which performs the test for in the scenario.
Returns
  • The new Scenario.
Notes
  • If the testFn is not provided here, it must be done via the doing method prior to running,
  • an error will occur.
ExamplesNone
Sourcesrc/extensions/cp/spec/Scenario.lua line 102

#Methods

Signaturecp.spec.Scenario:doing(actionFn) -> self
TypeMethod
DescriptionSpecifies the function for the definition.
Parameters
  • testFn - The function that will do the test.
Returns
  • The same Definition.
NotesNone
ExamplesNone
Sourcesrc/extensions/cp/spec/Scenario.lua line 121

Signaturecp.spec.Scenario:run(...) -> cp.spec.Run
TypeMethod
DescriptionRuns the scenario.
Parameters
  • ... - The list of filters. The first one will be compared to this scenario to determine it should be run.
Returns
  • cp.spec.Run object
NotesNone
ExamplesNone
Sourcesrc/extensions/cp/spec/Scenario.lua line 186

Signaturecp.spec.Scenario:where(data) -> cp.spec.Where
TypeMethod
DescriptionSpecifies a table of data that will be iterated through as multiple Runs, one row at a time.
Parameters
  • data - The data table.
Returns
Notes
  • The first row should be all strings, which will be the name of the parameter. Subsequent rows are the values for those rows.
ExamplesNone
Sourcesrc/extensions/cp/spec/Scenario.lua line 208