LoginSignup
16

More than 5 years have passed since last update.

Mochaを用いたJavaScriptのテスト実行

Last updated at Posted at 2017-01-03

概要

JavaScriptでBotを実装していたら「テストコードを書くとコードがきれいになる」との助言を受けた。
今回はmochaを使ったテストの実行例を紹介する。
なお、当エントリは「Fate/stay nighgt」および「Fate/hollow ataraxia」のネタバレを含んでいる。

環境構築

npm install --global mocha

package.jsへの依存関係の記載が必要。

実装

テスト対象となるコード

src/HolyGrail.js
// 「座」に存在する英霊
const SERVANT_LIST = {
  "sheath"  : "Arthur",
  "earring" : "Cuchulain",
  "pendant" : "Emiya",
  "mirror"  : "Medusa",
  "book"    : "Medea",
  "gate"    : "Kojiro",
  "ax"      : "Hercules"
};

/**
 * @classdesc 聖杯
 */
var HolyGrail = function() {
  /**
   * 英霊召喚
   * @param {string} catalyst - 触媒
   */
  this.contract = function(catalyst) {
    var servant = SERVANT_LIST[catalyst];
    return servant;
  };
};

module.exports = HolyGrail;

テストコード

test/test.js
var assert = require('assert');

// テストスクリプトからの相対パスでrequire
var HolyGrail = require('../src/holygrail');

describe("HolyGrail", function(){
  // 凛が所持するペンダントに対応する英霊はアルトリアではない
  it("Rin tried:", function(){
      var servant = new HolyGrail();
      assert.equal("Arthur", servant.contract('pendant'));
  });
  // 士郎の体内の剣の鞘に対応する英霊はアルトリア
  it("Shiro tried:", function(){
    var servant = new HolyGrail();
    assert.equal("Arthur", servant.contract('sheath'));
  });
});

テストコードの書き方は以下のような感じ。

it("テスト名", function(){
  var <インスタンス> = new <クラス>(<引数>);
  assert.equal(<結果>, <インスタンス>.<メソッド名>(<引数>))
})

今回はわざとコケるテストを書いています。

実行結果

-bash 19:02:43 ]mocha


  HolyGrail
    1) Rin tried:
    ✓ Shiro tried:


  1 passing (12ms)
  1 failing

  1) HolyGrail Rin tried::

      AssertionError: "Arthur" == "Emiya"
      + expected - actual

      -Arthur
      +Emiya
      
      at Context.<anonymous> (test/test.js:6:14)

期待通り「Rin」の英霊召喚は彼女の思い通りにはなりませんでした。

package.jsonscriptsプロパティを用いたテスト実行

package.jsonの記述(部分)

package.json
  "scripts": {
    "test": "mocha"
  },

実行結果

-bash 19:06:00 ]npm test

> Sebastien@0.0.0 test /Users/wifeofvilon/Projects/mochaTest
> mocha



  HolyGrail
    1) Rin tried:
    ✓ Shiro tried:


  1 passing (10ms)
  1 failing

  1) HolyGrail Rin tried::

      AssertionError: "Arthur" == "Emiya"
      + expected - actual

      -Arthur
      +Emiya
      
      at Context.<anonymous> (test/test.js:10:14)



npm ERR! Test failed.  See above for more details.
npm ERR! not ok code 0

ポイント

  • mochaは特に何も指定しないとtest/下のファイルを実行するらしい
  • module.exportsを指定しないとテストが実行できない
  • 「Fate」シリーズの「クラス」概念ってすごいよね

参考

MochaでJavaScriptのテストを書く - CLOVER
Node.jsでmochaやproxyquireを使った単体テストをやってみたメモ - Qiita
package.json の scripts - Qiita

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
16