@zoroaster/types

1.0.0 • Public • Published

@zoroaster/types

npm version

@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

Readme

Keywords

Package Sidebar

Install

npm i @zoroaster/types

Weekly Downloads

10

Version

1.0.0

License

MIT

Unpacked Size

15.9 kB

Total Files

10

Last publish

Collaborators

  • zvr