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