Giter Club home page Giter Club logo

tsdoc-testify's Introduction

tsdoc-testify

documentation testing for tsdoc.

Inspired by Rust documentation tests, this tool extracts code from @example block of tsdoc style comments and generate jest friendly test codes.

Getting Started

Prerequisites

Installing

$ npm install -g tsdoc-testify

How to use

  1. Prepare .ts file with tsdoc style docs.
/**
 * sub function
 *
 * @remarks
 * demo
 *
 * @example
 *
 * ```
 * import * as assert from "assert";
 * import { sub } from "./sample";
 *
 * assert.equal(sub(2, 1), 1);
 * ```
 *
 * @example
 *
 * ```
 * import * as assert from "assert";
 * import { sub } from "./sample";
 *
 * assert.equal(sub(4, 5), -1);
 * ```
 * @param a
 * @param b
 */
export function sub(a: number, b: number) {
  return a - b;
}
  1. Generate test code
$ tsdoc-testify --filepath path/to/file.ts  # (or also accepts glob with --fileMatch flag)

By default, generate testcode file in the same directory as original file with .doctest.ts extension.

// Code generated by "ts-doctestify"; DO NOT EDIT.

import * as assert from "assert";
import { sum, sub, Duck } from "./sample";
test("/Users/akito/workspace/tsdoc-testify/examples/sample.ts_1", () => {
  assert.equal(sub(2, 1), 1);
});
test("/Users/akito/workspace/tsdoc-testify/examples/sample.ts_2", () => {
  assert.equal(sub(4, 5), -1);
});
  1. Setup jest

Add .doctest.ts pattern to testMatch directive of jest config.

  "jest": {
    "moduleFileExtensions": [
      "ts",
      "tsx"
    ],
    "transform": {
      "^.+\\.(ts|tsx)$": "ts-jest"
    },
    "globals": {
      "ts-jest": {
        "tsConfig": "tsconfig.json"
      }
    },
    "testMatch": [
      "**/__tests__/*.+(ts|tsx|js)",
      "**/*.doctest.ts" // add
    ],
    "testPathIgnorePatterns": [
      "/node_modules/"
    ]
  },
  1. Setup tsconfig.json

Add @types/jest to types directive of tsconfig.json.

{
  "compilerOptions": {
    ...
    "types": [
      "@types/jest"  // add
    ]
  },
  ...
}
  1. Run
$ jest

 PASS  examples/sample.doctest.ts
  ✓ /Users/akito/workspace/tsdoc-testify/examples/sample.ts_0 (2ms)
  ✓ /Users/akito/workspace/tsdoc-testify/examples/sample.ts_1

Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        1.857s, estimated 3s

Custom tags

@exampleCaseName

Test case name (the first argument of test function) is original filename + order no by default. It can be modified by using @exampleCaseName inline tag.

For example.

/**
 *
 * @example
 * {@exampleCaseName custom name here}
 *
 * ```
 * import * as assert from "assert";
 * import { sub } from "./sample";
 *
 * assert.equal(sub(2, 1), 1);
 * ```
 *
 */
export function sub(a: number, b: number) {
  return a - b;
}

then:

// Code generated by "ts-doctestify"; DO NOT EDIT.

import * as assert from "assert";
import { sum, sub, Duck } from "./sample";

test("custom name here", () => {
  assert.equal(sub(2, 1), 1);
});

@ignoreExample

If you want to skip generation for specific @example case, you can use @ignoreExample inline tag.

/**
 * @example
 *
 * ```
 * import * as assert from "assert";
 * import { sub } from "./sample";
 *
 * assert.equal(sub(3, 2), 1);
 * ```
 *
 * @example
 * {@ignoreExample}
 *
 * ```
 * import * as assert from "assert";
 * import { sub } from "./sample";
 *
 * assert.equal(sub(2, 1), 1);
 * ```
 *
 */
export function sub(a: number, b: number) {
  return a - b;
}

then:

// Code generated by "ts-doctestify"; DO NOT EDIT.

import * as assert from "assert";
import { sum, sub, Duck } from "./sample";

test("/Users/akito/workspace/tsdoc-testify/examples/sample.ts_2", () => {
  assert.equal(sub(3, 2), 1);
});

Second block is ignored.

Examples

see examples

Options

NAME:
   tsdoc-testify - documentation testing generator for tsdoc

USAGE:
   tsdoc-testify [OPTIONS]

VERSION:
  0.0.1


OPTIONS:
	--help  	 show help
	--filepath  	 src file path (only single file accepted)
	--fileMatch  	 src file path (regexp).

License

This project is licensed under the Apache License 2.0 License - see the LICENSE file for details

tsdoc-testify's People

Contributors

akito0107 avatar orisano avatar aiya000 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.