この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは!モバイルアプリサービス部の田中孝明です。
最近、日付を操作する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
最後に
個人的にはクラスメソッドの創立記念日だけど休日ではない
というテストに失敗して欲しかったのですが...期待通りの結果が得られてしまいましたね。
日本の休日に登録されるくらい大きな会社になりたいですね!