Help us understand the problem. What is going on with this article?

Node.jsでmochaを使ってBDDスタイルのユニットテスト

More than 3 years have passed since last update.

mocha

mocha(モカ)と読む。Javascriptの単体テストフレームワーク。

mochaの特徴

  • node.jsやブラウザから実行可能できる。
  • 非同期のテストもできる。
  • TDDやBDDスタイルでテストを記述できる。
  • テスト結果も多くの形式で出力できる。
  • mocha自体はアサーション機能を持たない。
    → 値の検証には標準のassertやchai、shouldを使用する。

mochaをインストール

mochaをグローバルインストールする。

$ npm install -g mocha

chai

chaiはBDD / TDDスタイルで記述できるアサーションライブラリ。
BDDスタイルは、expect / shouldが用意されており、TDDスタイルはassertで表現する。

shouldとexpectの違い

sholudはObject自身を拡張して、sholudメソッドを追加して実装されている。
英語の文法に近い記述ができる。
メモ:どうもIEとはは相性がよろしくないみたい。

shouldの例
// 「fooがbarと等しくなければいけない」ことをテスト。
foo.should.equal('bar');

expectは関数で、引数に評価する値を渡す。

expectの例
expect(foo).to.equal('bar'); 

chaiをインストール

$ npm install chai

chai自体はTDDとBDDに対応していが、まずは、BDDスタイルのshouldでテストを作ってみた。

実装とテスト

プロジェクトの作成

sample-mocha
├── src
│   └── calculation.coffee
└── test
    └── calculation-bdd-should.coffee

テスト対象の作成

calculation.coffee
class Calculator

  constructor: () ->
    console.log 'Calcクラスのインスタンスを生成する。'

  add: (a, b) ->
    ans = a + b
    return ans

  multiply: (a, b) ->
    ans = a* b
    return ans

module.exports = Calculator

テストコードを書いてみる

mochaではBDD向けのスタイルとして以下が提供されている。

関数 概要
describe ネスト管理可能な階層。テスト対象を宣言する。
before describeの前に実行される。前提条件を記述する。
after describeの後に実行される。後処理を記述する。
beforeEach 各describeの前に実行される。前提条件を記述する。
afterEach 各describeの後に実行される。後処理を記述する。
it 検証内容を記述する。
calculation-bdd-should.coffee
should = require('chai').should();

Calculator = require '../src/calculator'

# テスト対象を宣言
describe 'Calculator', () ->

  calc = null

  # 各describeの前
  before () ->
    console.log 'before method'
    calc = new Calculator()

  # 各describeの後
  after () ->
    console.log 'after method'
    calc = null

  # 各itの前
  beforeEach () ->
    console.log 'beforeEach method'

  afterEach () ->
    console.log 'afterEach method'

  # 実行するテストコード
  it '1 + 2 = 3', () ->
    calc.add(1, 2).should.equal(3)
  it '1 * 2 = 2', () ->
    calc.multiply(1, 2).should.equal(2)

テストの実行

$ mocha --compilers coffee:coffee-script/register test/

  Calculator
before method
Calcクラスのインスタンスを生成する。
beforeEach method
    ✓ 1 + 2 = 3
afterEach method
beforeEach method
    ✓ 1 * 2 = 2
afterEach method
after method


  2 passing (7ms)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした