20
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Mochaを使ったNode.jsでの単体テスト入門の入門

Last updated at Posted at 2015-10-21

Mochaを使ったNode.jsでの単体テスト入門の入門

用語

Mocha(モカ)

JavaScriptのテスティングフレームワーク。

Chai

JavaScriptテスティングフレームワークのアサーションライブラリ。
テスティングフレームワークと一緒に使う。
記述スタイルをshould,expect,assert文から選べる。

TDD

テスト駆動開発 (てすとくどうかいはつ、test-driven development; TDD)

プログラム開発手法の一種で、プログラムに必要な各機能について、最初にテストを書き(これをテストファーストと言う)、そのテストが動作する必要最低限な実装をとりあえず行った後、コードを洗練させる、という短い工程を繰り返すスタイルである。多くのアジャイルソフトウェア開発手法、例えばエクストリーム・プログラミングにおいて強く推奨されている。近年はビヘイビア駆動開発へと発展を遂げている。

BDD

ビヘイビア駆動開発 (振舞駆動開発; behavior driven development; BDD)

プログラム開発手法の一種で、テスト駆動開発から派生した物である。
テスト駆動開発で記述されるテストケースは、作成したプログラムの動作が正しいかどうかを検証するために行う「テスト」である。テストであるという点は同一であるが、加えて、これから作成しようとするプログラムに期待される「振る舞い」や「制約条件」、つまり「要求仕様」に近い形で、自然言語を併記しながらテストコードを記述する。テストフレームワークのメソッド名も自然言語(英語など)に近い形をとっている。

スタイル

  • TDDスタイル

    • Node.js標準のassert文がメインのスタイル

      assert

    assert.equal(foo, 'bar');

  • BDDスタイル

    • Should文を使用したスタイル

    The should interface extends Object.prototype to provide a single getter as the starting point for your language assertions. It works on node.js and in all modern browsers except Internet Explorer.

    Node及びIE以外のモダンブラウザで動く。

    should
    foo.should.be.a('string');
    
    • Expect文を使用したスタイル

    The expect interface provides a function as a starting point for chaining your language assertions. It works on node.js and in all browsers.

    Node及びすべてのブラウザで動く☆

    expect
    expect(foo).to.be.a('string');
    

さわってみる

assertスタイル

$ npm install mocha --save-dev
$ npm install chai  --save-dev
$ mkdir test
$ ls
node_modules  package.json  test
$ cat <<_EOF> test/test.js
var assert = require('assert');
describe('Array', function() {
  describe('#indexOf()', function () {
    it('should return -1 when the value is not present', function () {
      assert.equal(-1, [1,2,3].indexOf(5));
      assert.equal(-1, [1,2,3].indexOf(0));
    });
  });
});
_EOF
$ mocha
Array
  #indexOf()
    ? should return -1 when the value is not present


1 passing (8ms)

Shouldスタイル

should
var chai = require("chai");
chai.should();

describe('Array', function() {
  describe('#indexOf()', function() {
    it('should return -1 when the value is not present', function() {
      [1,2,3].indexOf(5).should.equal(-1);
      [1,2,3].indexOf(0).should.equal(-1);
    });
  });
});

Expectスタイル

expect
var expect = require("chai").expect;
describe('Array', function() {
  describe('#indexOf()', function() {
    it('should return -1 when the value is not present', function() {
      expect([1,2,3].indexOf(5)).to.equal(-1);
      expect([1,2,3].indexOf(0)).to.equal(-1);
    });
  });
});

おわり

今回Node.jsのテストフレームワークとしてMochaを使用してみましたが、他にもJasmine2とかが有名のようです。

参考サイト

20
22
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
20
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?