Package detail

@unional/fixture

unional1kMIT3.2.17

Provides fixture to tests

readme

@unional/fixture

NPM version NPM downloads

GitHub NodeJS Codecov

Semantic Release

Visual Studio Code

Provides fixture for tests. You can use it for any test runner such as jest, ava, mocha, tap, etc.

Install

# npm
npm install -D @unional/fixture

# yarn
yarn add -D @unional/fixture

# pnpm
pnpm install -D @unional/fixture

# rush
rush add -p @unional/fixture --dev

Usage

baseline() is the heart of @unional/fixture. You can use it to read a folder containing multiple test cases and use them in your test runner.

import { baseline } from '@unional/fixture'

// basic usage
baseline('fixtures', ({ caseName, caseType, casePath, resultPath, match, copyToBaseline }) => {
  // `test()` comes from your favorite test runner.
  // e.g. `ava`, `jest`, `mocha`
  test(caseName, async () => {
    // this example assumes `caseType === 'file'`,
    // so the `casePath` points to the input file directly.
    fs.readFileSync(casePath, 'utf-8')

    // `resultPath` points to a folder where you can save your result(s)
    fs.writeFileSync(path.join(resultPath, 'output.txt', '<some data>'))

    // compare result and baseline folder
    await match()

    // match compares specific file in result folder and baseline folder
    await match('output.txt')

    // if you are happy with the change,
    // use this to copy the artifacts from result folder to baseline folder,
    // or you can do that manually from your IDE.
    await copyToBaseline('*.txt')
  })

  // advance usage
  baseline({
    basePath: 'fixtures',
    // default: 'cases'
    casesFolder: 'scenarios',
    // default: 'results'
    resultsFolder: 'actuals',
    // default: 'baselines'
    baselinesFolder: 'expects',
    // filter for specific cases
    // can use wildcards or RegExp
    filter: '*.pass',
    // By default warning messages will be displayed when some test cases are filtered.
    // Use this to suppress those warnings.
    suppressFilterWarnings: true,
    // If the file has more lines than this threshold,
    // then the file will be diff with line numbers,
    // and the unchanged lines will be trimmed off.
    largeFileThreshold: 100,
    // Controls how many unchanged lines will be shown around the changes.
    largeFileAmbientLines: 5,
    /**
     * Maximum number of diff lines to show.
     * If there are more diff lines,
     * the remaining will be timmed and show a summary instead.
     */
    diffDisplayThreshold: 150
  }, (context) => {
    ...
  })
})

Command Testing

In addition to baseline(), @unional/fixture provides execCommand() and writeCommandResult() to run command line test within the fixture.

If the test case is a JSON or YAML, it will read and execute the command within. If the test case is a folder, it will look for a command.json|yml|yaml in the folder and does the same.

More file types and features will be added in the future.

Here is a common way to use them:

import { baseline, execCommand, writeCommandResult } from '@unional/fixture'

baseline('fixtures/command', ({ caseType, caseName, casePath, resultPath, match }) => {
  it(caseName, async () => {
    writeCommandResult(
      resultPath,
      await execCommand({ caseType, caseName, casePath })
    )
    return match()
  })
})

The execCommand() has an alternative signature that allows you to easily run and capture stdout and stderr:

const { stdout, stderr } = await execCommand({ casePath, command, args })

Contribute

# right after fork
yarn

# begin making changes
git checkout -b <branch>
yarn watch

# edit `webpack.config.dev.js` to exclude dependencies for the global build.

# after making change(s)
git commit -m "<commit message>"
git push

# create PR

Commands

There are a few useful commands you can use during development.

# Run tests (and lint) automatically whenever you save a file.
yarn watch

# Run tests with coverage stats (but won't fail you if coverage does not meet criteria)
yarn test

# Manually verify the project.
# This will be ran during 'npm preversion' so you normally don't need to run this yourself.
yarn verify

# Build the project.
# You normally don't need to do this.
yarn build

# Run tslint
# You normally don't need to do this as `yarn watch` and `npm version` will automatically run lint for you.
yarn lint

changelog

3.2.17 (2023-05-30)

Bug Fixes

  • deps: update dependency type-plus to v7 (#205) (c9e6148)

3.2.16 (2023-04-13)

Bug Fixes

  • deps: update dependency standard-log-color to v12 (#201) (a209e91)

3.2.15 (2023-04-02)

Bug Fixes

  • deps: update dependency minimatch to v8 (#194) (794e5de)

3.2.14 (2023-03-17)

Bug Fixes

  • deps: update dependency type-plus to v6 (#192) (765667a)

3.2.13 (2023-02-20)

Bug Fixes

  • deps: update dependency minimatch to v7 (#187) (839dfcf)

3.2.12 (2023-02-11)

Bug Fixes

3.2.11 (2023-01-16)

Bug Fixes

  • deps: update dependency minimatch to v6 (#179) (c051593)

3.2.10 (2023-01-16)

Bug Fixes

  • deps: update dependency mkdirp to v2 (#181) (813d212)

3.2.9 (2023-01-10)

Bug Fixes

  • deps: update dependency iso-error to v6 (#176) (2ee0ed1)

3.2.8 (2022-12-14)

Bug Fixes

  • deps: update dependency type-plus to v5 (#171) (9bdf0e0)

3.2.7 (2022-11-28)

Bug Fixes

  • deps: update dependency iso-error to v5 (#165) (852302f)

3.2.6 (2022-10-22)

Bug Fixes

3.2.5 (2022-10-03)

Bug Fixes

  • deps: update dependency standard-log-color to v11 (#160) (cbe0f9f)

3.2.4 (2022-10-03)

Bug Fixes

  • deps: update dependency standard-log to v11 (#159) (21b6f58)

3.2.3 (2022-10-02)

Bug Fixes

  • deps: update dependency standard-log-color to v10 (#158) (d86fb8b)

3.2.2 (2022-10-02)

Bug Fixes

  • deps: update dependency standard-log-color to v9 (40acb22)

3.2.1 (2022-09-07)

Bug Fixes

3.2.0 (2022-09-07)

Features

  • add execCommand alt signature (435a2d9)

3.1.4 (2022-09-05)

Bug Fixes

3.1.3 (2022-09-05)

Bug Fixes

  • avoid creating baselines folder (ee3a5c3)

3.1.2 (2022-08-27)

Bug Fixes

3.1.1 (2022-08-27)

Bug Fixes

3.1.0 (2022-08-27)

Bug Fixes

Features

3.0.1 (2022-08-25)

Bug Fixes

3.0.0 (2022-08-25)

Bug Fixes

Features

  • adjust folders to paths (92cce46)

BREAKING CHANGES

  • context behavir changed

The handler context now contains case|baseline|resultPath instead of folder.

The behavior for file-case and folder-case now are are same.

casePath points to the actual case file or folder. baseline|resultPath always points to a folder with case name. Even if it is a file-case, a folder with that name (including file extension) will be created.

This allows user to simply check caseType to see if it is a file or folder case and read the right thing, based on their assumption of the structure.

This allows the baseline() to be used in a fixture folder with mixed file and folder cases.

2.0.2 (2022-08-23)

Bug Fixes

2.0.1 (2022-06-07)

Bug Fixes

  • deps: update dependency standard-log to v8 (2a2afbf)
  • deps: upgrade standard-log-color (0ea01a7)

2.0.0 (2022-06-05)

BREAKING CHANGES

  • upgrade chalk

chalk@5 is published as ESM, and that breaks jest.

Need to add this to jest.config.js:

{
  moduleNameMapper: {
    '#(.*)': '<rootDir>/node_modules/$1' // needed for `chalk` getting `#ansi-styles`
  },
  transformIgnorePatterns: [
    'node_modules/(?!(@unional\\fixture|chalk)/)'
  ]
}

1.8.5 (2022-06-05)

Bug Fixes

1.8.4 (2022-06-05)

Bug Fixes

1.8.3 (2022-06-05)

Bug Fixes