[Node.js] 今日がお休みか気になる人に届けるWebAPI

はじめに

こんにちは!モバイルアプリサービス部の田中孝明です。
最近、日付を操作するAPIを開発していた経緯があり、「創立記念日」という「日付」に絡めて、雑多にまとめてみました。

開発環境

Node.js + restifyという組み合わせてAPIの開発を行います。
ライブラリ管理にはyarnを使用し、休日の判定のライブラリはjapanese-holidaysを利用させていただきました。

$ yarn
$ yarn add restify
$ yarn add japanese-holidays

日付を判定する

holiday.js という japanese-holidays を叩くだけのクラスを作成しました。

'use strict';

const JapaneseHolidays = require('japanese-holidays');


exports.isHoliday = () => {
  return Boolean(JapaneseHolidays.isHoliday(new Date()));
};


日付を判定するテスト

テスト用のモジュールの追加

では日付を判定してみましょう。
yarn でテスト用のモジュールを組み込みます。

$ yarn add mocha --dev
$ yarn add sinon --dev 
$ yarn add chai --dev

テストファイルの追加

test直下にテストを追加しましょう。
今回はholiday_test.jsを追加しました。

'use strict';

const chai = require('chai');
const expect = chai.expect;
const sinon = require('sinon');
const Holiday = require('../models/holiday');


describe('Check Holiday', () => {
  let clock;

  context('2017-07-07T00:00:00+09:00', () => {
    before(() => {
      clock = sinon.useFakeTimers(new Date('2017-07-07T00:00:00+09:00').getTime());
    });

    after(() => {
      clock.restore();
    });

    it('クラスメソッドの創立記念日だけど休日ではない', () =>{
      expect(Holiday.isHoliday()).to.be.false;
    });
  });

  context('2017-07-28T15:00:00+09:00', () => {
    before(() => {
      clock = sinon.useFakeTimers(new Date('2017-07-28T15:00:00+09:00').getTime());
    });

    after(() => {
      clock.restore();
    });

    it('プレミアムフライデーは休日ではない', () =>{
      expect(Holiday.isHoliday()).to.be.false;
    });
  });

  context('2017-07-17T00:00:00+09:00', () => {
    before(() => {
      clock = sinon.useFakeTimers(new Date('2017-07-17T00:00:00+09:00').getTime());
    });

    after(() => {
      clock.restore();
    });

    it('海の日最高!', () =>{
      expect(Holiday.isHoliday()).to.be.true;
    });
  });
});

テストスクリプトの指定

package.json にテスト用のスクリプトを追加しましょう。

"scripts": {
  "test": "mocha test/**/*.js"
}


テストの実行

テストスクリプトでテストを実行します。
期待通りの結果が得られるでしょう。

$ yarn test


スクリーンショット 2017-07-07 11.04.35

最後に

個人的にはクラスメソッドの創立記念日だけど休日ではないというテストに失敗して欲しかったのですが...期待通りの結果が得られてしまいましたね。
日本の休日に登録されるくらい大きな会社になりたいですね!

リンク

  • restify
  • yarn
  • japanese-holidays