LoginSignup
13
13

More than 5 years have passed since last update.

Node単体テスト 最初の一歩

Posted at

Nodeで最低限のテストができるようにするよ。何も知らなくても15分くらいあればテストの最初の一歩をふみだせるように記事を書いたよ。

概要

  • npm test でテストが走るように設定
  • テストコード作成

Step#01 初期設定

~/letstest をプロジェクトディレクトリにしよう。配下にtestディレクトリを作ってここにテストコードを置く。ディレクトリ名をtestにすることで、テストツールがテストコードの場所を見つけることができる。テストツールはmochaが普通に使われているのでこれをインストールする。

$ mkdir -p ~/letstest/test
$ cd ~/letstest
$ npm init -y
$ npm install -save mocha

npm init -y コマンドを打つと、package.jsonが生成される。この中のscripts.testフィールドが、npm testを打つ時のコマンドになる。以下のように書き換えれば、mochaでテストが実行できる準備ができる。

package.json
... (前略)
  "scripts": {
    "test": "mocha"
... (後略)

Step#02: テストの作成

同期関数のテストは例外がでなければ成功とみなされる。アサーションは、当面Node標準のassertでよい。以下は典型的なコード。describe, itとかはどっからきてるの?みたいな疑問があるが、mochaのコンテキストから来ている(のでこのjsファイルを直接実行しようとしてもエラーとなる。npm test経由で実行しよう)。

test/sync.js
const assert = require('assert')

describe('SyncTest', function() {
  it('Equality', function() {
    assert(1+1===2)
    assert.equal(1+1, 2)
  })
})

非同期関数のテストは二種類ある。コールバック型とPromise型。コールバック型のテストでは、コールバックdoneが無事呼び出されたらテストが成功となる。Promise型では、最終的にresolveされるPromiseがreturnされたらテストは成功となる。典型的には以下のコード。

async.js
const assert = require('assert')

describe('AsyncTest', function() {
  it ('WithCallback', function(done) {
    const targetFunc = cb=>{cb()}
    targetFunc(done)
  })
  it ('WithPromise', function() {
    return new Promise(r=>r('OK'))
  })

  it ('A lot more test With chai-promised etc')
})

次のステップ

  • もう少し複雑なテストケースをmochaのドキュメントで調べる
  • アサーションを強化できるchai, chai-as-promisedや、shouldexpect などの導入を考える
13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13