SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

JavaScriptでテストを書こう!

Mochaを使ってJavaScriptのテストをブラウザで実行してみよう

JavaScriptでテストを書こう! 第2回


chai.jsとは

 chai.jsは、Node.jsとブラウザで実行できるアサーションライブラリです。BDD、TDD双方のテスト記述方法と、実行環境はブラウザもNode.jsもサポートしています。

 TDDは、「assert」で表現します。想定した結果と処理の結果を関数の引数で渡し、関数で定義された通りの結果になるかどうかを評価します。想定と結果が違っていればExceptionを発生させ、テスティングフレームワークに結果を戻します。主なアサーションメソッドは以下のとおりです。

主なアサーションメソッド
メソッド 説明 使用例
equal 想定と処理結果が
等しいことを判定する
assert.equal(20, '20', '等しいことを判定する');
notEqual 想定と処理結果が
等しくないことを判定
assert.notEqual(20, 11);
deepEqual 配列の内容まで含めて
等しいことを判定
assert.deepEqual({name: 'yasunishi' }, { name: 'yasunishi' });
notDeepEqual 配列の内容まで含めて
等しくないことを判定
assert.notDeepEqual({ name: 'anzai' }, { name: 'yasunishi' });
strictEqual 想定と処理結果が等しいか
型まで厳密に判定
assert.strictEqual(true, true);
notStrictEqual 想定と処理結果が等しくない
ことを厳密に型まで判定
assert.notStrictEqual(10, '10');

 BDDは、expectとshouldが用意されています。expectは関数になっていて、評価をする値または関数の実行結果を引数に渡して、プロパティで評価する内容を指定します。shouldはオブジェクト自身を拡張しているため、評価したい変数を直接プロパティで結び、評価する内容を指定します。

expect、shouldが持つ主なアサーション関数およびチェインオブジェクト
関数 説明 使用例(expect) 使用例(should)
.equal(value)、.eql(value) 比較し同じかどうかを判定する。
===と同様に型まで厳密に判定する。
expect(42).to.equal(42); foo.should.to.equal(42);
.not チェーンされる
次のアサーションを
否定する
expect(foo).to.not.equal('bar'); foo.should.not.equal('bar');
.deep 配列の内容まで含めて
判定するという
意味を含める
expect(foo).to.deep.equal({ bar: 'baz' }); foo.should.to.deep.equal({ bar: 'baz' });
.a(type) 指定した型かどうかを
判定する
expect(foo).to.be.a('string'); foo.should.be.a('string');
.true trueかどうかを
判定する
expect(foo).to.not.be.true; foo.should.not.be.true;
.exist 存在するか(nullまたはundefinedではない)
を判定する
expect(foo).to.exist; foo.should.to.exist;

使用方法

 Mochaとchai.jsのブラウザでの使用方法を説明します。

Mochaのダウンロードと読み込み

 Mochaは、GitHubからダウンロードを行います。テスト結果の画面を表示するため、CSSファイルの読み込みも行います。

 JavaScript読み込み後に、初期設定を行います。setup関数を実行し、引数にテストの形式を指定します。また、各テストで使用するchai.jsのオブジェクトを変数に入れています。以下のコードは、BDDとTDDの記述例です。

Mochaで必要なファイルの読み込み(mochatdd.html)
<link rel="stylesheet" href="css/mocha.css" />
<script src="mocha.js" type="text/javascript"></script>
<script type="text/javascript">
<!--
// mochaの機能を呼び出します。ここでは、BDDとTDDを使用します。
mocha.setup('bdd');
mocha.setup('tdd');
var assert = chai.assert;
// expectの機能を読み込み
var expect = chai.expect;
// shouldの機能を読み込み
chai.Should();
-->
</script>

chai.jsのダウンロードと読み込み

 chai.jsは、JavaScriptファイルを読み込みます。chai.jsのサイトからダウンロードを行うことができます。

chai.jsで必要なファイルの読み込み(mochatdd.html)
<script src="chai.js" type="text/javascript"></script>

次のページ
ブラウザでのテストの記述方法

この記事は参考になりましたか?

JavaScriptでテストを書こう!連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 安西剛(ヤスニシ ツヨシ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7367 2013/10/01 11:48

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー