日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

Darkを支える技術 #3 テスト編

この記事は Dark - Developers at Real Kommunity Advent Calendar 2015 - Adventar の8日目として書かれています。

こんにちは。たなあら (@ara_ta3) | Twitter です。
もうちっとだけ続くんじゃ。

Darkというコミュニティアドベントカレンダーとして書いています。
前置きは #1 の日記を参考に・・・\(^o^)/arata.hatenadiary.com

DarkではSlackを利用していて、そこにはDarkというHubotが存在します。
今日はテスト周りについて話そうと思います。
Dark botは公開していて、だれでもPR投げれるんですが(たぶん)、テストがコケてるのにマージしてしまって動かなくなってしまうと、dark poemを打った返事がなくなってしまい心が廃れてしまいます。
だからテストがコケてる状態でマージできないように設定するのはとても大事です。github.com

※dark poemについてはこちらのちょっとふざけてる記事を御覧ください。

Q. じゃあどうやってるの?
A. テストの実行をTravis CI上で行い、github上でTravis CIがコケてるとマージできないように設定しています。

Travis CIの設定

設定している内容はこの程度です。

language: node_js
node_js: 
    - 5.1.0

Travis CIでlanguage: node_jsの設定を行うと、デフォルトでテスト時にnpm installnpm testが走ります。
設定はこちらを参考に。
Building a Node.js project - Travis CI

そしてnpm test実行時にどんなコマンドが走るかの設定はpackage.jsonで指定することができます。
dark-botでは make install && make test のように設定しています。

make install && make test ??

dark-botではMakefileでnpm等のコマンドをラップしています。

Makefile

token=
team=
name=

npm=$(shell which npm)
mocha=./node_modules/.bin/mocha
lint=./node_modules/.bin/coffeelint
gulp=./node_modules/.bin/gulp
monitoring-code=local
credential=./credentials/development

.PHONY:test

all: install

install:
	$(npm) install
	test -f settings/poems.json || cp settings/poems.json.sample settings/poems.json
	test -f settings/relayblog.json || cp settings/relayblog.json.sample settings/relayblog.json

start:
	./bin/hubot-slack $(credential) --monitoring-code=$(monitoring-code)

start-local:
	./bin/hubot

test-watch:
	$(gulp) watch

test: lint config-check
	$(mocha) --compilers coffee:coffee-script/register --recursive -R spec
	test -f settings/hello.json
	test -f settings/poems.json
	test -f settings/relayblog.json

lint:
	$(lint) scripts -f lintconfig.json

config-check:
	./bin/hubot --config-check

run-new-channels:
	./bin/start-new-channels $(credential)

これによってスクリプトのLINTとhubotの設定確認とmochaによるテストとファイル存在チェックが走ります。
Makefileはいずれかのコマンドの終了コードが1になると途中で失敗として終了してくれるので便利です。

Githubの設定

Github上でTravis CIのテストがこけたらMerge出来ないように設定します。
コードが置いてあるところのSettingsからBranchesを選び、Choose Branchesから守りたいブランチを選ぶと下記のようになります。
ここで、Protect this branchRequire status checks to pass before mergingを選び、status checkの方法としてTravis CIを選べば、PRマージのタイミングでTravis CIが通ってないとマージできないように設定することが出来ます。
べんり!

f:id:arata3da4:20151207204130p:plain

まとめ

  • githubレポジトリを守るためにテスト大事
  • Travis CIの設定かなり楽
  • そろそろネタ切れ
  • 次回はたぶんデプロイ周りの話
  • 明日のDark AdventCalendarはanoworl 氏による記事です。乞うご期待!