node-tap

Test Anything Protocol tools for node

Github星跟蹤圖

node-tap

A TAP test framework for
Node.js.

Build Status

Just wanna see some code? Get started!

It includes a command line test runner for consuming TAP-generating test
scripts, and a JavaScript framework for writing such scripts.

See the changelog for recent updates,
or just get started with the basics.

All this is too much to manage in a single README file, so head over to
the website to learn more.

Why TAP?

Why should you use this thing!? LET ME TELL YOU!

Just kidding.

Most frameworks spend a lot of their documentation telling you why they're
the greatest. I'm not going to do that.

tutti i gusti sono gusti

Software testing is a software and user experience design challenge that
balances on the intersection of many conflicting demands.

Node-tap is based on my opinions about how a test
framework should work, and what it should let you do. I do not have any
opinion about whether or not you share those opinions. If you do share
them, you will probably enjoy this test library.

  1. Test files should be "normal" programs that can be run directly.

    That means that it can't require a special runner that puts magic
    functions into a global space. node test.js is a perfectly ok way to
    run a test, and it ought to function exactly the same as when it's run
    by the fancy runner with reporting and such. JavaScript tests should be
    JavaScript programs; not english-language poems with weird punctuation.

  2. Test output should be connected to the structure of the test file in a
    way that is easy to determine.

    That means not unnecessarily deferring test functions until nextTick,
    because that would shift the order of console.log output. Synchronous
    tests should be synchronous.

  3. Test files should be run in separate processes.

    That means that it can't use require() to load test files. Doing
    node ./test.js must be the exact same sort of environment for the test
    as doing test-runner ./test.js. Doing node test/1.js; node test/2.js should be equivalent (from the test's point of view) to doing
    test-runner test/*.js. This prevents tests from becoming implicitly
    dependent on one anothers' globals.

  4. Assertions should not normally throw (but throws MUST be handled
    nicely).

    I frequently write programs that have many hundreds of assertions based
    on some list of test cases. If the first failure throws, then I don't
    know if I've failed 100 tests or 1, without wrapping everything in a
    try-catch. Furthermore, I usually want to see some kind of output or
    reporting to verify that each one actually ran.

    Basically, it should be your decision whether you want to throw or not.
    The test framework shouldn't force that on you, and should make either
    case easy.

  5. Test reporting should be separate from the test process, included in
    the framework, and enabled by default for humans.

    The raw test output should be
    machine-parseable and human-intelligible, and a separate process should
    consume test output and turn it into a pretty summarized
    report
    . This means that test data
    can be stored and parsed later, dug into for additional details, and so
    on. Also: nyan cat.

  6. Writing tests should be easy, maybe even fun.

    The lower the barrier to entry for writing new tests, the more tests get
    written. That means that there should be a relatively small vocabulary
    of actions that I need to remember as a test author. There is no
    benefit to having a distinction between a "suite" and a "subtest".
    Fancy DSLs are pretty, but more to remember.

    That being said, if you return a Promise, or use a DSL that throws a
    decorated error, then the test framework should Just Work in a way that
    helps a human being understand the situation.

  7. Tests should output enough data to diagnose a failure, and no more or
    less.

    Stack traces pointing at JS internals or the guts of the test framework
    itself are not helpful. A test framework is a serious UX challenge, and
    should be treated with care.

  8. Test coverage should be included.

    Running tests with coverage changes the way that you think about your
    programs, and provides much deeper insight. Node-tap bundles
    NYC for this.

    It does necessarily change the nature of the environment a little bit.
    But in this case, it's worth it, and NYC has come a long way towards
    maintaining this promise.

    Coverage enforcement is not on by default, but I strongly encourage
    it. You can put "tap":{"check-coverage":true} in your package.json,
    or pass --100 on the command line.
    In a future version, it will likely be enabled by default.

  9. Tests should not require more building than your code.

    Babel and Webpack are lovely and fine. But if your code doesn't require
    compilation, then I think your tests shouldn't either. Tap is extremely
    promise-aware. JSX, TypeScript,
    Flow, and ES-Modules are
    built-in when tests are run by
    the tap CLI.

  10. Tests should run as fast as possible, given all the prior
    considerations.

As of version 10, tap supports parallel
tests
. As of version 13, the test
runner defaults to running the same number of parallel tests as there
are CPUs on the system.

This makes tests significantly faster in almost every case, on any machine
with multiple cores.

Software testing should help you build software. It should be a security
blanket and a quality ratchet, giving you the support to undertake massive
refactoring and fix bugs without worrying. It shouldn't be a purification
rite or a hazing ritual.

There are many opinions left off of this list! Reasonable people can
disagree. But if you find yourself nodding along, maybe tap is for
you
.

主要指標

概覽
名稱與所有者tapjs/tapjs
主編程語言JavaScript
編程語言JavaScript (語言數: 7)
平台
許可證Other
所有者活动
創建於2011-03-21 18:02:54
推送於2025-02-19 23:15:28
最后一次提交
發布數2390
最新版本名稱@tapjs/worker@4.0.1 (發布於 2025-02-19 15:14:39)
第一版名稱v0.0.2 (發布於 2011-04-23 21:19:32)
用户参与
星數2.4k
關注者數22
派生數275
提交數3.8k
已啟用問題?
問題數717
打開的問題數33
拉請求數90
打開的拉請求數5
關閉的拉請求數226
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?