Sign Up for Free

RunKit +

Try any Node.js package right in your browser

This is a playground to test code. It runs a full Node.js environment and already has all of npm’s 1,000,000+ packages pre-installed, including snapshot-context with all npm packages installed. Try it out:

var snapshotContext = require("snapshot-context")

This service is provided by RunKit and is not affiliated with npm, Inc or the package authors.

snapshot-context v2.5.0

A context for zoroaster which enables snapshot testing.

snapshot-context

npm version

snapshot-context is Context For Snapshot Testing In Zoroaster.

yarn add -DE snapshot-context

Since Zoroaster 3.8.5, the snapshot functionality is enabled by returning the result of the test, there's no need to install this package manually.

Table Of Contents

class SnapshotContext

The snapshot context should be passed in to a Zoroaster test suite in the context property.

import { fork } from 'spawncommand'
import SnapshotContext from 'snapshot-context'
import Context from '../context'

/**
 * @type {Object.<string, (c: Context, s: SnapshotContext)>} */
const T = {
  context:[
    context,
    snapshotContext,
  ],
  async 'produces correct output'({ TEST_SUITE_PATH }, { test, setDir }) {
    setDir(SNAPSHOT_DIR)
    const { promise } = fork(BIN, [TEST_SUITE_PATH, '--babel'], {
      stdio: 'pipe',
    })
    const { stdout } = await promise
    await test('integration-stdout.txt', s)
  },
}

export default T

API

There is a set of methods made available by the API.

setDir(path:string)

Sets the root directory to save to and read snapshots from. Otherwise, an absolute path to the file can be passed. By default, the test/snapshot directory is used.

import { resolve } from 'path'
import snapshotContext, { SnapshotContext } from 'snapshot-context' // eslint-disable-line
import erte from '../../src' // tested lib

const SNAPSHOT_DIR = resolve(__dirname, '../snapshot')

const stringContext = {
  /**
   * A string with 1 new line
   */
  s: 'I am all in a sea of wonders.\nI doubt;\nI fear;\n',
  /**
   * A string with 2 new lines
   */
  t: 'I am all in a sea of wonders.\n\nI doubt;\n\nI fear;\n\n',
}

/** @type {Object.<string, (ctxString: stringContext ctx: SnapshotContext)>} */
const T = {
  context: [
    function () {
      Object.assign(this, stringContext)
    },
    snapshotContext,
  ],
  async 'replaces new lines'({ s, t }, { setDir, test }) {
    setDir(SNAPSHOT_DIR)
    const res = erte(s, t)
    await test('new-lines.txt', res)
  },
  // absolute path without set-dir
  async 'replaces reverse new lines'({ s, t }, { test }) {
    const res = erte(t, s)
    const path = resolve(SNAPSHOT_DIR, 'new-lines-reverse.txt')
    await test(path, res)
  },
}

export default T

async test(path:string, actual: string|object)

Test whether a snapshot matches the one saved in the path. An equality of strings is asserted, and objects are deep-equal tested. Objects are serialised as JSON for writing, and back when reading.

  • If there's no snapshot file existing, the user is prompted to answer the save snapshot question with a y to confirm new snapshot.
  • The path to the file will be ensured, so that all directories in the path are made.
  • The error stack will start at the point where test is called.

test cli demo

The difference between objects will be shown using deepEqual from the assert-diff

object diff

The difference between strings will be highlighted with erte.

string diff

Copyright & License

GNU Affero General Public License v3.0

Art Deco © Art Deco™ for ContextTesting 2020 ContextTesting AGPL-3.0
RunKit is a free, in-browser JavaScript dev environment for prototyping Node.js code, with every npm package installed. Sign up to share your code.
Sign Up for Free