@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 |
---|---|
import { join } from 'path'
import { debuglog } from 'util'
const LOG = debuglog('@zoroaster/types')
const FIXTURE = 'test/fixture'
/**
* A testing context for the package.
*/
export default class Context {
async _init() {
LOG('init context')
}
/**
* Example method.
*/
example() {
return 'OK'
}
/**
* Path to the fixture file.
*/
get FIXTURE() {
return join(FIXTURE, 'test.txt')
}
async _destroy() {
LOG('destroy context')
}
} |
import { equal, ok } from 'zoroaster/assert'
import Context from '../context'
import types from '../../src'
/** @type {Object.<string, (c: Context)>} */
const T = {
context: Context,
'is a function'() {
equal(typeof types, 'function')
},
async 'calls package without error'() {
await types()
},
async 'gets a link to the fixture'({ FIXTURE }) {
const res = await types({
text: FIXTURE,
})
ok(res, FIXTURE)
},
}
export default T |
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 | _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