Extend TestBox your way!
TestBox supports the concepts of modules just like how ColdBox has modules. They are self-contained packages that can extend the functionality of TestBox. They can listen to test creations, errors, failures, skippings and much more. To get started you can use the TestBox CLI to generate a module for you:
A TestBox module layout is similar to a ColdBox Module layout. They have to be installed at /testbox/system/modules
to be discovered and loaded and have one mandatory file: ModuleConfig.cfc
which must exist in the root of the module folder.
You can install TestBox modules from ForgeBox via the install
command:
There is no WireBox
There is no Routing
There is no Scheduling
There is no Interceptors
There is no Views
Inception works, but limited
No module dependencies, all modules are loaded in discovered order
This is the main descriptor file for your TestBox module.
It must have three mandatory callbacks:
configure()
- Configures the module for operation
onLoad()
- When the module is now activated
onUnload()
- When the module is deactivated
The following are the injected properties:
The following are injected methods:
If a module fails to be activated, it will still be in the module registry but marked inactive via the active
boolean key in its registry entry. You will also find the cause of the failure in the console logs and the key activationFailure
of the module's registry entry.
Not all ColdBox/CommandBox modules can be TestBox modules. Remember that TestBox modules are extremely lightweight and testing focused.
This ModuleConfig can also listen to the following test life-cycle events. It will also receive several arguments to the call. Here are the common descriptions of the arguments
target
- The bundle in question
testResults
- The TestBox results object
suite
- The suite descriptor
suiteStats
- The stats for the running suite
exception
- A ColdFusion exception
spec
- The spec descriptor
specStats
- The stats of the running spec
You can also manually register and activate modules by using the registerAndActivate( invocationPath )
method of the TestBox object. All you have to do is pass the invocation path to your modules' root folder:
That's it! It will register it and activate and be ready to listen.
Property
Description
ModulePath
The module’s absolute path
ModuleMapping
The module’s invocation path
TestBox
The testbox reference
TestBoxVersion
The version of TestBox being used
Method
Description
getEnv()
Get an environment variable
getSystemSetting()
Get a Java system setting
getSystemProperty()
Get a Java system property
getJavaSystem()
Get the Java system class
Callback
Arguments
onBundleStart()
target
testResults
onBundleEnd()
target
testResults
onSuiteStart()
target
testResults
suite
onSuiteEnd()
target
testResults
suite
onSuiteError()
exception
target
testResults
suite
onSuiteSkipped()
target
testResults
suite
onSpecStart()
target
testResults
suite
spec
onSpecEnd()
target
testResults
suite
spec
onSpecFailure()
exception
spec
specStats
suite
suiteStats
testResults
onSpecSkipped()
spec
specStats
suite
testResults
onSpecError()
exception
spec
specStats
suite
suiteSpecs
testResults