6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【jasmine + Karma】の単体テストをCircleCIで実行されるようにしてみた

Last updated at Posted at 2017-01-03

【jasmine + Karma】 による AngularJs 単体テストをしてみた
で作ったプロジェクトについて、CircleCIを使って、githubにpushされたらkarmaでjasmineの単体テストが実行されるようにしてみました。

CircleCI の 設定

CircleCI の 登録

CircleCIの「Authorize Github」で、githubアカウントでcircleCIの登録を行います。

circleci-sinup.png

CircleCI で Buildを行いたいレポジトリを選択

CircleCIのAdd Projectで、ciで回したいリポジトリを追加します。
今回は、リポジトリ「test-circleCI」を追加しようと思いますので、
下記添付画像の ① > ② > ③ の順でクリックしていきます。

add-project.png

build projectをクリックした段階で、対象のリポジトリに対してBuildが行われます。

circleCIの設定を置いていなくてもなんかいい感じにnpm testを実施してうまいこといっている雰囲気なのですが、nodeのversionが古かったりするので、circle.ymlでちゃんと記述してこうかと思います。

circle.yml

node versionの上げ方については、ここを参考にしてます。てゆうかまんまコピペ・・・

依存関係は、「dependencies」で記述するらしい?ので、ここで、npm install を行います。
キャッシュが悪さしてnpm install 失敗するのもいやなので、npmのキャッシュを消してからnpm install しています。

最後に、testとして、package.jsonに記述しているkarma実行scriptを叩いています。

circle.yml
machine:
  timezone:
    Asia/Tokyo
  node:
    version: 6.3.0
  post:
    - npm install -g npm@3

dependencies:
  override:
    - npm cache clean
    - npm install

test:
  override:
    - npm run karma

Coverage

CircleCIのArtifactsにCoverageのhtmlを吐き出したいのですが、ローカルでは、./Coverageに吐き出したい。

ということで、karma.config.jsのcoverageReporterプロパティを追加します。
htmlを吐き出すディレクトリは、
ローカルの時は、 ./coverage/
CircleCIの時は、Artifacts/coverage/
となるようにします。

karma.config.js
+  var reportDir = process.env['CIRCLE_TEST_REPORTS'] || '.';

+  coverageReporter: {
+    dir: reportDir + '/coverage/',
+    reporters: [ { type: 'html' } ]
+ },

実際にBranchをpushして、CircleCIが回るか確認する。

coverage.png

ci-npm-test.png

ちゃんと、CircleCIでKarmaが実行されて、Artifactsにcoverageが吐き出されてます(^ ^)

因みに、ローカルでテストした場合は、./coverage に吐き出されていました。

折角なので、githubのmasterブランチを保護する

CircleCIでテスト実施の環境が整ったので、githubのmasterブランチについて、テストが通らないとマージできないように保護したいと思います。

保護したいリポジトリのsetting > Branches > Protected branches で mastarを選択し、status checks で、circleciを選択するだけです。

branch-protect.png

保護した結果

ciが回っている間や、テストに失敗した場合は、マージボタンがdisableとなりマージできなくなりました。

CircleCI Running

test-running.png

CircleCI Test NG

test-ng.png

CircleCI Test Success

テストを含めBuildが全て問題なく完了した場合は、マージボタンが活性化しました。

test-ok.png

おわりに

CircleCIのど導入は、思っていた以上にあっさりできてしまいました。
CircleCIは、無料プランでもいろいろできるようなので、どんどん使っていきたいですね。

ソースはgithubで公開しています。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?