@zoroaster/types
@zoroaster/types
is the types in context testing.
yarn add -D @zoroaster/types
Table Of Contents
API
The package can enable VSCode types highlighting by importing its types via the @typedef
:
/**
* @suppress {nonStandardJsDocs}
* @typedef {import('@zoroaster/types').Test} _contextTesting.ContextConstructor
* @typedef {import('@zoroaster/types').TestSuite} _contextTesting.TestSuite
* @typedef {import('@zoroaster/types').ContextConstructor} _contextTesting.ContextConstructor
* @typedef {import('@zoroaster/types').Context} _contextTesting.Context
*/
The types and externs for Google Closure Compiler via Depack are defined in the _contextTesting
namespace.
Context
The context
is the property on test suites which contains either an object, or Context Constructors -- classes used to create a new context for tests.
function(new: _contextTesting.Context)
_contextTesting.ContextConstructor
: The constructor class of a context.
_contextTesting.Context
: The context made with a constructor.
Name | Type | Description |
---|---|---|
_init | function(): (!Promise | void) | The function to initialise the context before each test. |
_destroy | function(): (!Promise | void) | The function to destroy the context after its test is run. |
Context Example
The context is used to put all service methods for test cases into a single class, and access them via tests' arguments.
Context | Spec |
---|---|
|
|
Test Suite & Test
@Zoroaster/types package also provides interfaces for the test and test suite types. They are useful to establish communication between the @zoroaster/reducer
library and zoroaster
binary so that they both support the same properties and the compiler can check them correctly.
// zoroaster
/**
* A test suite is a collection of tests with any number of contexts.
* @implements {_contextTesting.TestSuite}
*/
export default class TestSuite {
/* ... */
/**
* Whether test suite has focused tests.
*/
get hasFocused(){
// this.names is a nested collection of inner test and test suite names.
return this.names.some(n => n.startsWith('!'))
}
get isFocused() {
return this.name.startsWith('!')
}
}
// @zoroaster/reducer
/**
* Run all tests in sequence, one by one.
* This also runs only selected tests, e.g., !test and !test suite
* @param {!Array<!(_contextTesting.Test|_contextTesting.TestSuite)>} tests An array with tests.
* @param {_contextTesting.ReducerConfig} config The options for the reducer.
*/
const reducer = async (tests, config) => {
await tests.reduce(async (acc, test) => {
const {
name, isFocused, fn, hasFocused, // accessing the interface API
} = test
const isTest = !!fn
if (allCanRun || isFocused || hasFocused) {
/* ... */
}
}
}
_contextTesting.TestSuite
: The test suite interface.
Name | Type | Description |
---|---|---|
name* | string | The name of the test suite. |
isFocused* | boolean | If the test suite is focused. |
hasFocused* | boolean | Whether the test suite has focused tests. |
tests* | !Array<!(contextTesting.Test | <a href="#type-contexttestingtestsuite" title="The test suite interface.">_contextTesting.TestSuite)> | Whether the test suite has focused tests. |
_contextTesting.Test
: The test interface required for the reducer.
Name | Type | Description |
---|---|---|
name* | string | The name of the test. |
fn* | function(..._contextTesting.Context): (!Promise | void) | The test function to run. |
isFocused* | boolean | If the name of the test has ! . |
Copyright
(c) Context Testing 2019